{"id":138390,"date":"2026-08-10T00:00:00","date_gmt":"2026-08-10T07:00:00","guid":{"rendered":"https:\/\/www.rentcafe.com\/blog\/?p=138390"},"modified":"2026-08-25T04:25:02","modified_gmt":"2026-08-25T11:25:02","slug":"national-average-apartment-size","status":"publish","type":"post","link":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/","title":{"rendered":"U.S. apartment sizes are growing: Where are renters gaining the most space?"},"content":{"rendered":"\n<p>If you&#8217;re hoping for larger floor plans, the good news is that apartment sizes have increased in 2025 compared to the previous year. More precisely, floor plans currently average 910 square feet nationwide with every unit type having gained additional living space. As apartment sizes expand, much of that growth is concentrated in Southern markets, where larger floor plans remain a defining feature.<\/p>\n\n\n\n<div class=\"cmw-key-takeaways\">\r\n\t\t<p class=\"cmw-key-takeaways__title\"><strong>Key takeaways:<\/strong><\/p>\r\n\t\t<ul class=\"cmw-key-takeaways__list\"><li>The typical size of apartments in 2025 increased by 13 square feet, reaching 910 square feet.<\/li><li>All apartment types gained additional square footage with three-bedroom apartments seeing the largest year-over-year increase at 28 square feet.<\/li><li>Tallahassee, FL, is home to the largest apartments in the nation, averaging 1,156 square feet.<\/li><li>Seattle has the smallest apartments in the U.S., down 47 square feet compared to 10 years ago.<\/li><li>Apartments in major hubs like San Francisco and Queens, NY, gained square footage, adding 35 and 16 square feet in 10 years, respectively.<\/li><\/ul>\r\n\t<\/div>\n\n\n\n<p>Among the cities with the most notable increases, <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/frisco-tx\/\">Frisco, TX<\/a>, and <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/st-petersburg-fl\/\">St. Petersburg, FL<\/a>, are the biggest standouts: The average apartment in both cities is now&nbsp;55 square feet&nbsp;larger than it was a decade ago.&nbsp;Meanwhile,&nbsp;Florida\u2019s <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/tallahassee-fl\/\">Tallahassee<\/a> and <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/gainesville-fl\/\">Gainesville<\/a> offer some of the nation\u2019s largest apartments, while <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/seattle-wa\/\">Seattle<\/a> and <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/portland-or\/\">Portland, OR<\/a>, remain home to the smallest.<\/p>\n\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Muli:ital,wght@0,400;0,600;0,700;1,400&display=swap');\n\n#rc-apartment-size-trend {\n      --blue: #18a4d6;\n      --purple: #8227BE;\n      --text: #424141;\n      --muted: #6b7280;\n      --grid: #e2e2e2;\n      --border: #e5e7eb;\n    \n}\n\n#rc-apartment-size-trend {\n      margin: 0;\n      background: #ffffff;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      color: var(--text);\n    \n}\n\n#rc-apartment-size-trend .visual-wrap {\n      max-width: 980px;\n      margin: 16px auto;\n      padding: 0 14px;\n      box-sizing: border-box;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n    \n}\n\n#rc-apartment-size-trend .export-actions {\n      display: flex;\n      gap: 16px;\n      margin-top: 12px;\n\n}\n\n#rc-apartment-size-trend .export-btn {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--muted);\n      text-decoration: underline;\n      cursor: pointer;\n\n}\n\n#rc-apartment-size-trend .export-btn:hover {\n      color: var(--text);\n\n}\n\n#rc-apartment-size-trend .visual-card {\n      background: #ffffff;\n      padding: 12px 14px 10px;\n      border-radius: 10px;\n      border: 1px solid var(--border);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n      box-sizing: border-box;\n    \n}\n\n#rc-apartment-size-trend .visual-title {\n      margin: 0 0 6px;\n      text-align: center;\n      font-size: 22px;\n      font-weight: 700;\n      color: #555555;\n      line-height: 1.2;\n    \n}\n\n#rc-apartment-size-trend .chart-area {\n      width: 100%;\n      aspect-ratio: 980 \/ 390;\n      position: relative;\n\n}\n\n#rc-apartment-size-trend svg {\n      width: 100%;\n      height: 100%;\n      overflow: visible;\n      display: block;\n    \n}\n\n#rc-apartment-size-trend .grid-line {\n      stroke: var(--grid);\n      stroke-width: 1;\n      shape-rendering: crispEdges;\n    \n}\n\n#rc-apartment-size-trend .axis-label {\n      fill: #777777;\n      font-size: 13px;\n      font-weight: 400;\n    \n}\n\n#rc-apartment-size-trend .label-group {\n      pointer-events: none;\n    \n}\n\n#rc-apartment-size-trend .label-bg {\n      fill: #ffffff;\n      fill-opacity: 0.94;\n      stroke: #ffffff;\n      stroke-width: 2;\n    \n}\n\n#rc-apartment-size-trend .value-label {\n      fill: #222222;\n      font-size: 14px;\n      font-weight: 500;\n    \n}\n\n#rc-apartment-size-trend .value-label.uptick-label {\n      fill: var(--purple);\n      font-weight: 700;\n    \n}\n\n#rc-apartment-size-trend .trend-line {\n      fill: none;\n      stroke: var(--purple);\n      stroke-width: 3;\n      stroke-linecap: round;\n      stroke-linejoin: round;\n      stroke-dasharray: 1 6;\n    \n}\n\n#rc-apartment-size-trend .uptick-line {\n      fill: none;\n      stroke: var(--purple);\n      stroke-width: 3.5;\n      stroke-linecap: round;\n      stroke-linejoin: round;\n      stroke-dasharray: 1 6;\n    \n}\n\n#rc-apartment-size-trend .point {\n      fill: var(--purple);\n      stroke: var(--purple);\n      stroke-width: 2;\n    \n}\n\n#rc-apartment-size-trend .bottom-bar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 12px;\n      margin-top: 8px;\n      padding-top: 8px;\n      border-top: 1px solid var(--border);\n      flex-wrap: wrap;\n    \n}\n\n#rc-apartment-size-trend .source {\n      font-size: 11px;\n      color: var(--muted);\n      line-height: 1.35;\n      margin: 0;\n      flex: 1;\n    \n}\n\n#rc-apartment-size-trend .footer-right {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      flex: 0 0 auto;\n    \n}\n\n#rc-apartment-size-trend .brand-logo {\n      height: 22px;\n      width: auto;\n      display: block;\n    \n}\n\n@media (max-width: 700px) {\n#rc-apartment-size-trend .visual-wrap {\n        margin: 10px auto;\n        padding: 0 10px;\n      \n}\n\n#rc-apartment-size-trend .visual-card {\n        padding: 12px 10px 10px;\n      \n}\n\n#rc-apartment-size-trend .visual-title {\n        font-size: 18px;\n      \n}\n\n#rc-apartment-size-trend .axis-label {\n        font-size: 11px;\n      \n}\n\n#rc-apartment-size-trend .value-label {\n        font-size: 11px;\n      \n}\n\n#rc-apartment-size-trend .bottom-bar {\n        flex-direction: column;\n        align-items: flex-start;\n      \n}\n\n#rc-apartment-size-trend .footer-right {\n        justify-content: flex-start;\n      \n}\n}\n<\/style>\n\n<div id=\"rc-apartment-size-trend\" class=\"rc-gutenberg-visual\" data-rc-visual=\"rc-apartment-size-trend\">\n<div class=\"visual-wrap\">\n<div class=\"visual-card\" data-rc-id=\"export-card\" id=\"rc-apartment-size-trend-export-card\">\n<h1 class=\"visual-title\">New apartments continue getting larger, breaking a decade-long pattern<\/h1>\n<div class=\"chart-area\">\n<svg aria-label=\"Line chart showing average apartment size from 2016 to 2025\" data-rc-id=\"chart\" id=\"rc-apartment-size-trend-chart\" role=\"img\" viewbox=\"0 0 980 390\"><\/svg>\n<\/div>\n<div class=\"bottom-bar\">\n<p class=\"source\">\n          Source: RentCafe analysis of Yardi data as of May 2026 \u2022 All data is accurate as of the date of publication.\n        <\/p>\n<div class=\"footer-right\">\n<a href=\"https:\/\/www.rentcafe.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">\n<img decoding=\"async\" alt=\"RentCafe logo\" class=\"brand-logo\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/11\/RentCafe-logo-for-light-background.png?resize=500,128\"\/>\n<\/a>\n<\/div>\n<\/div>\n<div class=\"export-actions\">\n<button class=\"export-btn\" data-rc-download=\"true\" data-rc-download-filename=\"apartment-size-trend.png\" data-rc-download-target=\"export-card\" type=\"button\">Download PNG<\/button>\n<button class=\"export-btn\" data-rc-get-data=\"true\" data-rc-get-data-filename=\"apartment-size-trend-data.csv\" type=\"button\">Get data<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('rc-apartment-size-trend');\n  if (!root || root.dataset.rcInitialized === 'true') return;\n  root.dataset.rcInitialized = 'true';\n\n  function getById(id) {\n    return root.querySelector('[data-rc-id=\"' + id + '\"]');\n  }\n\n  function loadHtml2Canvas() {\n    if (window.html2canvas) {\n      return Promise.resolve(window.html2canvas);\n    }\n\n    if (window.__rentcafeHtml2CanvasPromise) {\n      return window.__rentcafeHtml2CanvasPromise;\n    }\n\n    window.__rentcafeHtml2CanvasPromise = new Promise(function (resolve, reject) {\n      const existingScript = document.querySelector('script[data-rentcafe-html2canvas=\"true\"]');\n\n      if (existingScript) {\n        existingScript.addEventListener('load', function () {\n          if (window.html2canvas) resolve(window.html2canvas);\n          else reject(new Error('html2canvas loaded but is unavailable.'));\n        }, { once: true });\n        existingScript.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js';\n      script.async = true;\n      script.setAttribute('data-rentcafe-html2canvas', 'true');\n      script.onload = function () {\n        if (window.html2canvas) resolve(window.html2canvas);\n        else reject(new Error('html2canvas loaded but is unavailable.'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n\n    return window.__rentcafeHtml2CanvasPromise;\n  }\n\n  function html2canvas(element, options) {\n    return loadHtml2Canvas().then(function (html2canvasLibrary) {\n      return html2canvasLibrary(element, options);\n    });\n  }\n\n  function bindDownloadButton() {\n    const button = root.querySelector('[data-rc-download=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const target = button.getAttribute('data-rc-download-target') || 'export-card';\n      const filename = button.getAttribute('data-rc-download-filename');\n\n      if (filename) {\n        downloadPNG(target, filename);\n      } else {\n        downloadPNG(target);\n      }\n    });\n  }\n\n  function csvEscape(value) {\n    const str = String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n    if (\/[\",\\n]\/.test(str)) {\n      return '\"' + str.replace(\/\"\/g, '\"\"') + '\"';\n    }\n    return str;\n  }\n\n  function buildCsv() {\n    const header = ['Year', 'Average apartment size (sq. ft.)'];\n    const lines = [header.map(csvEscape).join(',')];\n\n    data.forEach(function (point) {\n      lines.push([point.year, point.value].map(csvEscape).join(','));\n    });\n\n    return lines.join('\\r\\n');\n  }\n\n  function bindGetDataButton() {\n    const button = root.querySelector('[data-rc-get-data=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const filename = button.getAttribute('data-rc-get-data-filename') || 'data.csv';\n      const csv = buildCsv();\n      const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = filename;\n      link.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  function bindOptionalControls() {\n    const citySearch = getById('citySearch');\n    if (citySearch && typeof handleSearch === 'function') {\n      citySearch.addEventListener('input', handleSearch);\n    }\n\n    const clearSearch = getById('clearSearch');\n    if (clearSearch && typeof clearCitySearch === 'function') {\n      clearSearch.addEventListener('click', clearCitySearch);\n    }\n\n    const prevPage = getById('prevPage');\n    if (prevPage && typeof changePage === 'function') {\n      prevPage.addEventListener('click', function () {\n        changePage(currentPage - 1);\n      });\n    }\n\n    const nextPage = getById('nextPage');\n    if (nextPage && typeof changePage === 'function') {\n      nextPage.addEventListener('click', function () {\n        changePage(currentPage + 1);\n      });\n    }\n\n    const pageButtons = getById('pageButtons');\n    if (pageButtons && typeof changePage === 'function') {\n      pageButtons.addEventListener('click', function (event) {\n        const button = event.target.closest('[data-rc-page]');\n        if (!button || !pageButtons.contains(button)) return;\n        changePage(Number(button.getAttribute('data-rc-page')));\n      });\n    }\n  }\n\n  const data = [\n        { year: 2016, value: 920 },\n        { year: 2017, value: 922 },\n        { year: 2018, value: 923 },\n        { year: 2019, value: 909 },\n        { year: 2020, value: 913 },\n        { year: 2021, value: 909 },\n        { year: 2022, value: 882 },\n        { year: 2023, value: 898 },\n        { year: 2024, value: 897 },\n        { year: 2025, value: 910 }\n      ];\n\n      const svg = getById('chart');\n\n      const width = 980;\n      const height = 390;\n\n      const margin = {\n        top: 28,\n        right: 18,\n        bottom: 42,\n        left: 42\n      };\n\n      const innerWidth = width - margin.left - margin.right;\n      const innerHeight = height - margin.top - margin.bottom;\n\n      const yMin = 880;\n      const yMax = 925;\n      const yTicks = [880, 885, 890, 895, 900, 905, 910, 915, 920, 925];\n\n      const x = (index) => margin.left + (index \/ (data.length - 1)) * innerWidth;\n      const y = (value) => margin.top + ((yMax - value) \/ (yMax - yMin)) * innerHeight;\n\n      function createSvgElement(tag, attrs = {}) {\n        const element = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', tag);\n\n        Object.entries(attrs).forEach(([key, value]) => {\n          element.setAttribute(key, value);\n        });\n\n        return element;\n      }\n\n      function catmullRomToBezier(points) {\n        if (points.length < 2) return '';\n\n        let d = `M ${points[0].x},${points[0].y}`;\n\n        for (let i = 0; i < points.length - 1; i++) {\n          const p0 = points[i - 1] || points[i];\n          const p1 = points[i];\n          const p2 = points[i + 1];\n          const p3 = points[i + 2] || p2;\n\n          const cp1x = p1.x + (p2.x - p0.x) \/ 6;\n          const cp1y = p1.y + (p2.y - p0.y) \/ 6;\n          const cp2x = p2.x - (p3.x - p1.x) \/ 6;\n          const cp2y = p2.y - (p3.y - p1.y) \/ 6;\n\n          d += ` C ${cp1x},${cp1y} ${cp2x},${cp2y} ${p2.x},${p2.y}`;\n        }\n\n        return d;\n      }\n\n      function addValueLabel(point, offset, isUptickLabel) {\n        const group = createSvgElement('g', {\n          class: 'label-group'\n        });\n\n        const labelX = point.x + offset.dx;\n        const labelY = point.y + offset.dy;\n\n        const valueLabel = createSvgElement('text', {\n          x: labelX,\n          y: labelY,\n          'text-anchor': offset.anchor,\n          class: isUptickLabel ? 'value-label uptick-label' : 'value-label'\n        });\n\n        valueLabel.textContent = `${point.value} sq. ft.`;\n\n        group.appendChild(valueLabel);\n        svg.appendChild(group);\n\n        const bbox = valueLabel.getBBox();\n        const padX = 5;\n        const padY = 3;\n\n        const labelBg = createSvgElement('rect', {\n          x: bbox.x - padX,\n          y: bbox.y - padY,\n          width: bbox.width + padX * 2,\n          height: bbox.height + padY * 2,\n          rx: 4,\n          ry: 4,\n          class: 'label-bg'\n        });\n\n        group.insertBefore(labelBg, valueLabel);\n      }\n\n      function renderChart() {\n        svg.innerHTML = '';\n\n        const points = data.map((d, i) => ({\n          x: x(i),\n          y: y(d.value),\n          year: d.year,\n          value: d.value\n        }));\n\n        yTicks.forEach((tick) => {\n          const yPos = y(tick);\n\n          svg.appendChild(createSvgElement('line', {\n            x1: margin.left,\n            x2: width - margin.right,\n            y1: yPos,\n            y2: yPos,\n            class: 'grid-line'\n          }));\n\n          const tickLabel = createSvgElement('text', {\n            x: margin.left - 10,\n            y: yPos + 4,\n            'text-anchor': 'end',\n            class: 'axis-label'\n          });\n\n          tickLabel.textContent = tick;\n          svg.appendChild(tickLabel);\n        });\n\n        data.forEach((d, i) => {\n          const yearLabel = createSvgElement('text', {\n            x: x(i),\n            y: height - 12,\n            'text-anchor': 'middle',\n            class: 'axis-label'\n          });\n\n          yearLabel.textContent = d.year;\n          svg.appendChild(yearLabel);\n        });\n\n        const mainPoints = points.filter((point) => point.year <= 2024);\n        const uptickPoints = points.filter((point) => point.year >= 2024);\n\n        svg.appendChild(createSvgElement('path', {\n          d: catmullRomToBezier(mainPoints),\n          class: 'trend-line'\n        }));\n\n        svg.appendChild(createSvgElement('path', {\n          d: catmullRomToBezier(uptickPoints),\n          class: 'uptick-line'\n        }));\n\n        points.forEach((point) => {\n          const isUptickPoint = point.year >= 2024;\n\n          svg.appendChild(createSvgElement('circle', {\n            cx: point.x,\n            cy: point.y,\n            r: isUptickPoint ? 4.5 : 4,\n            class: isUptickPoint ? 'point uptick-point' : 'point'\n          }));\n        });\n\n        const labelOffsets = {\n          2016: { dx: 6, dy: -22, anchor: 'start' },\n          2017: { dx: 0, dy: -24, anchor: 'middle' },\n          2018: { dx: 8, dy: -22, anchor: 'middle' },\n          2019: { dx: 0, dy: 32, anchor: 'middle' },\n          2020: { dx: 0, dy: -22, anchor: 'middle' },\n          2021: { dx: 0, dy: 32, anchor: 'middle' },\n          2022: { dx: 8, dy: -26, anchor: 'middle' },\n          2023: { dx: 12, dy: -24, anchor: 'middle' },\n          2024: { dx: -8, dy: 34, anchor: 'middle' },\n          2025: { dx: -8, dy: -22, anchor: 'end' }\n        };\n\n        points.forEach((point) => {\n          const offset = labelOffsets[point.year] || { dx: 0, dy: -22, anchor: 'middle' };\n          const isUptickLabel = point.year === 2025;\n\n          addValueLabel(point, offset, isUptickLabel);\n        });\n      }\n\n      function downloadPNG(elementId, filename) {\n        const el = getById(elementId);\n        if (!el) return;\n\n        const rcExportActions = el.querySelector('.export-actions');\n        const rcExportActionsDisplay = rcExportActions ? rcExportActions.style.display : '';\n        if (rcExportActions) { rcExportActions.style.display = 'none'; }\n        html2canvas(el, {\n          scale: 2,\n          useCORS: true,\n          backgroundColor: '#ffffff'\n        }).then(function (canvas) {\n          if (rcExportActions) { rcExportActions.style.display = rcExportActionsDisplay; }\n          const link = document.createElement('a');\n          link.href = canvas.toDataURL('image\/png');\n          link.download = filename;\n          link.click();\n        });\n      }\n\n  function initVisual() {\n    bindDownloadButton();\n    bindGetDataButton();\n    bindOptionalControls();\n    if (typeof renderChart === 'function') renderChart();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVisual, { once: true });\n  } else {\n    initVisual();\n  }\n})();\n<\/script>\n\n\n\n\n<p>To&nbsp;determine&nbsp;which cities&nbsp;have seen the biggest changes in rental size&nbsp;during the last decade,&nbsp;<a href=\"https:\/\/www.rentcafe.com\/\">RentCafe.com<\/a>&nbsp;examined the size of&nbsp;apartments across the 100 largest cities&nbsp;in the U.S. We looked at the&nbsp;markets&nbsp;with the largest and smallest apartments, as well as those that experienced the most significant changes in square footage&nbsp;since 2016.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-apartments-are-nbsp-getting-larger-across-the-nation-nbsp\"><span data-contrast=\"auto\">Apartments are&nbsp;getting larger across the nation&nbsp;<\/span><\/h2>\n\n\n\n<p><span data-contrast=\"auto\">Renters searching for apartments this rental season are more likely to find a place with a bit more breathing room&nbsp;as&nbsp;all&nbsp;units&nbsp;have&nbsp;become larger&nbsp;overall.&nbsp;For example, studios gained&nbsp;six&nbsp;square feet to now average 460 square feet, whereas one-bedroom and two-bedroom apartments average 735 and 1,095 square feet, respectively.&nbsp;<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" height=\"305\" width=\"1320\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/08\/average-size-new-apartments-by-unit-type.png?w=1320\" alt=\"\" class=\"wp-image-150195\" srcset=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/08\/average-size-new-apartments-by-unit-type.png 1864w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/08\/average-size-new-apartments-by-unit-type.png?resize=500,115 500w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/08\/average-size-new-apartments-by-unit-type.png?resize=768,177 768w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/08\/average-size-new-apartments-by-unit-type.png?resize=1320,305 1320w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/08\/average-size-new-apartments-by-unit-type.png?resize=1536,354 1536w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/08\/average-size-new-apartments-by-unit-type.png?resize=150,35 150w\" sizes=\"auto, (max-width: 1320px) 100vw, 1320px\" \/><\/figure>\n\n\n\n<p><span data-contrast=\"auto\">However, the most notable increase occurred among three-bedrooms: These apartments gained 28 square feet year-over-year \u2014 the equivalent of a small balcony \u2014 and now average 1,355 square feet, which further pushes the national average higher. <\/span><\/p>\n\n\n\n<p>Several factors likely contribute to the nationwide increase in average apartment size. First, with new apartments entering the market, developers are offering more square footage to stand out and attract renters.<\/p>\n\n\n\n<p>At the same time, <a href=\"https:\/\/www.census.gov\/newsroom\/press-releases\/2026\/vintage-2025-pop-estimates.html\" data-type=\"link\" data-id=\"https:\/\/www.pew.org\/en\/research-and-analysis\/articles\/2026\/05\/26\/most-states-population-growth-slowed-in-2025-as-international-migration-declined\" target=\"_blank\" rel=\"noreferrer noopener\">more people are moving toward Southern markets<\/a> \u2014 where land is more affordable and apartments tend to be larger \u2014 which is pulling the national average upward.<\/p>\n\n\n\n<p><span data-contrast=\"auto\">The increase also suggests that demand for larger living spaces remains strong, especially among renters seeking flexibility for family life, remote work or evolving household needs.&nbsp;<\/span><\/p>\n\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Muli:ital,wght@0,400;0,600;0,700;1,400&display=swap');\n\n#rc-share-built-unit-type {\n      --text: #424141;\n      --muted: #6b7280;\n      --border: #e5e7eb;\n      --row: #f8fafc;\n      --purple: #8227BE;\n    \n}\n\n#rc-share-built-unit-type {\n      margin: 0;\n      background: #ffffff;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      color: var(--text);\n    \n}\n\n#rc-share-built-unit-type .visual-wrap {\n      max-width: 980px;\n      margin: 16px auto;\n      padding: 0 14px;\n      box-sizing: border-box;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n    \n}\n\n#rc-share-built-unit-type .export-actions {\n      display: flex;\n      gap: 16px;\n      margin-top: 12px;\n\n}\n\n#rc-share-built-unit-type .export-btn {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--muted);\n      text-decoration: underline;\n      cursor: pointer;\n\n}\n\n#rc-share-built-unit-type .export-btn:hover {\n      color: var(--text);\n\n}\n\n#rc-share-built-unit-type .visual-card {\n      background: #ffffff;\n      padding: 12px 14px 10px;\n      border-radius: 10px;\n      border: 1px solid var(--border);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n      box-sizing: border-box;\n    \n}\n\n#rc-share-built-unit-type .visual-title {\n      margin: 0 0 22px;\n      text-align: center;\n      font-size: 22px;\n      font-weight: 700;\n      color: #555555;\n      line-height: 1.2;\n    \n}\n\n#rc-share-built-unit-type .table-wrap {\n      width: 100%;\n      overflow-x: auto;\n    \n}\n\n#rc-share-built-unit-type .visual-table {\n      width: 100%;\n      border-collapse: collapse;\n      table-layout: fixed;\n      min-width: 620px;\n    \n}\n\n#rc-share-built-unit-type .visual-table th,\n#rc-share-built-unit-type .visual-table td {\n      padding: 7px 10px;\n      text-align: center;\n      font-size: 14px;\n      line-height: 1.15;\n      color: #222222;\n      font-weight: 400;\n    \n}\n\n#rc-share-built-unit-type .visual-table thead th {\n      font-size: 15px;\n      font-weight: 700;\n      color: #222222;\n      border-bottom: 2px solid #333333;\n      padding-bottom: 9px;\n    \n}\n\n#rc-share-built-unit-type .visual-table thead th:first-child {\n      width: 150px;\n    \n}\n\n#rc-share-built-unit-type .visual-table tbody tr:nth-child(even) {\n      background: var(--row);\n    \n}\n\n#rc-share-built-unit-type .visual-table tbody td:first-child {\n      font-weight: 400;\n      color: #222222;\n    \n}\n\n#rc-share-built-unit-type .notes {\n      margin-top: 22px;\n      font-size: 12px;\n      line-height: 1.25;\n      color: #666666;\n      font-style: italic;\n    \n}\n\n#rc-share-built-unit-type .notes p {\n      margin: 0;\n    \n}\n\n#rc-share-built-unit-type .bottom-bar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 12px;\n      margin-top: 12px;\n      padding-top: 8px;\n      border-top: 1px solid var(--border);\n      flex-wrap: wrap;\n    \n}\n\n#rc-share-built-unit-type .source {\n      font-size: 11px;\n      color: var(--muted);\n      line-height: 1.35;\n      margin: 0;\n      flex: 1;\n    \n}\n\n#rc-share-built-unit-type .footer-right {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      flex: 0 0 auto;\n    \n}\n\n#rc-share-built-unit-type .brand-logo {\n      height: 22px;\n      width: auto;\n      display: block;\n    \n}\n\n@media (max-width: 700px) {\n#rc-share-built-unit-type .visual-wrap {\n        margin: 10px auto;\n        padding: 0 10px;\n      \n}\n\n#rc-share-built-unit-type .visual-card {\n        padding: 12px 10px 10px;\n      \n}\n\n#rc-share-built-unit-type .visual-title {\n        font-size: 18px;\n        margin-bottom: 16px;\n      \n}\n\n#rc-share-built-unit-type .table-wrap {\n        overflow-x: visible;\n\n}\n\n#rc-share-built-unit-type .visual-table {\n        display: block;\n        width: 100%;\n        min-width: 0;\n\n}\n\n#rc-share-built-unit-type .visual-table thead {\n        display: none;\n\n}\n\n#rc-share-built-unit-type .visual-table tbody {\n        display: block;\n\n}\n\n#rc-share-built-unit-type .visual-table tbody tr {\n        display: grid;\n        grid-template-columns: repeat(2, 1fr);\n        column-gap: 12px;\n        row-gap: 8px;\n        border: 1px solid var(--border);\n        border-radius: 10px;\n        padding: 10px 12px 11px;\n        margin-bottom: 8px;\n\n}\n\n#rc-share-built-unit-type .visual-table td {\n        display: block;\n        text-align: left;\n        padding: 0;\n        font-size: 13px;\n        white-space: normal;\n\n}\n\n#rc-share-built-unit-type .visual-table td:first-child {\n        grid-column: 1 \/ -1;\n        font-weight: 700;\n        font-size: 14px;\n        padding-bottom: 6px;\n        margin-bottom: 2px;\n        border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n\n}\n\n#rc-share-built-unit-type .visual-table td:not(:first-child)::before {\n        content: attr(data-label);\n        display: block;\n        font-size: 10px;\n        font-weight: 700;\n        text-transform: uppercase;\n        letter-spacing: 0.02em;\n        opacity: 0.7;\n        margin-bottom: 2px;\n\n}\n\n#rc-share-built-unit-type .notes {\n        font-size: 11px;\n      \n}\n\n#rc-share-built-unit-type .bottom-bar {\n        flex-direction: column;\n        align-items: flex-start;\n      \n}\n\n#rc-share-built-unit-type .footer-right {\n        justify-content: flex-start;\n      \n}\n}\n<\/style>\n\n<div id=\"rc-share-built-unit-type\" class=\"rc-gutenberg-visual\" data-rc-visual=\"rc-share-built-unit-type\">\n<div class=\"visual-wrap\">\n<div class=\"visual-card\" data-rc-id=\"export-card\" id=\"rc-share-built-unit-type-export-card\">\n<h1 class=\"visual-title\">Share of apartments built by unit type<\/h1>\n<div class=\"table-wrap\">\n<table aria-label=\"Share of apartments built by unit type\" class=\"visual-table\">\n<thead>\n<tr>\n<th scope=\"col\"><\/th>\n<th scope=\"col\">Studio<\/th>\n<th scope=\"col\">1 bedroom<\/th>\n<th scope=\"col\">2 bedroom<\/th>\n<th scope=\"col\">3 bedroom<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>2025<\/td>\n<td data-label=\"Studio\">5.2%<\/td>\n<td data-label=\"1 bedroom\">47.7%<\/td>\n<td data-label=\"2 bedroom\">39.5%<\/td>\n<td data-label=\"3 bedroom\">7.1%<\/td>\n<\/tr>\n<tr>\n<td>Last 10 years<\/td>\n<td data-label=\"Studio\">5.7%<\/td>\n<td data-label=\"1 bedroom\">48.0%<\/td>\n<td data-label=\"2 bedroom\">38.2%<\/td>\n<td data-label=\"3 bedroom\">6.8%<\/td>\n<\/tr>\n<tr>\n<td>Historical<\/td>\n<td data-label=\"Studio\">4.6%<\/td>\n<td data-label=\"1 bedroom\">42.2%<\/td>\n<td data-label=\"2 bedroom\">44.5%<\/td>\n<td data-label=\"3 bedroom\">8.6%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"notes\">\n<p>\u201cLast 10 years\u201d refers to apartments completed between 2016 and 2025.<\/p>\n<p>\u201cHistorical\u201d represents apartments completed before 2016.<\/p>\n<\/div>\n<div class=\"bottom-bar\">\n<p class=\"source\">\n          Source: RentCafe analysis of Yardi data as of May 2026 \u2022 All data is accurate as of the date of publication.\n        <\/p>\n<div class=\"footer-right\">\n<a href=\"https:\/\/www.rentcafe.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">\n<img decoding=\"async\" alt=\"RentCafe logo\" class=\"brand-logo\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/11\/RentCafe-logo-for-light-background.png?resize=500,128\"\/>\n<\/a>\n<\/div>\n<\/div>\n<div class=\"export-actions\">\n<button class=\"export-btn\" data-rc-download=\"true\" data-rc-download-filename=\"apartments-built-by-unit-type.png\" data-rc-download-target=\"export-card\" type=\"button\">Download PNG<\/button>\n<button class=\"export-btn\" data-rc-get-data=\"true\" data-rc-get-data-filename=\"share-built-by-unit-type-data.csv\" type=\"button\">Get data<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('rc-share-built-unit-type');\n  if (!root || root.dataset.rcInitialized === 'true') return;\n  root.dataset.rcInitialized = 'true';\n\n  function getById(id) {\n    return root.querySelector('[data-rc-id=\"' + id + '\"]');\n  }\n\n  function loadHtml2Canvas() {\n    if (window.html2canvas) {\n      return Promise.resolve(window.html2canvas);\n    }\n\n    if (window.__rentcafeHtml2CanvasPromise) {\n      return window.__rentcafeHtml2CanvasPromise;\n    }\n\n    window.__rentcafeHtml2CanvasPromise = new Promise(function (resolve, reject) {\n      const existingScript = document.querySelector('script[data-rentcafe-html2canvas=\"true\"]');\n\n      if (existingScript) {\n        existingScript.addEventListener('load', function () {\n          if (window.html2canvas) resolve(window.html2canvas);\n          else reject(new Error('html2canvas loaded but is unavailable.'));\n        }, { once: true });\n        existingScript.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js';\n      script.async = true;\n      script.setAttribute('data-rentcafe-html2canvas', 'true');\n      script.onload = function () {\n        if (window.html2canvas) resolve(window.html2canvas);\n        else reject(new Error('html2canvas loaded but is unavailable.'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n\n    return window.__rentcafeHtml2CanvasPromise;\n  }\n\n  function html2canvas(element, options) {\n    return loadHtml2Canvas().then(function (html2canvasLibrary) {\n      return html2canvasLibrary(element, options);\n    });\n  }\n\n  function bindDownloadButton() {\n    const button = root.querySelector('[data-rc-download=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const target = button.getAttribute('data-rc-download-target') || 'export-card';\n      const filename = button.getAttribute('data-rc-download-filename');\n\n      if (filename) {\n        downloadPNG(target, filename);\n      } else {\n        downloadPNG(target);\n      }\n    });\n  }\n\n  function csvEscape(value) {\n    const str = String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n    if (\/[\",\\n]\/.test(str)) {\n      return '\"' + str.replace(\/\"\/g, '\"\"') + '\"';\n    }\n    return str;\n  }\n\n  function buildCsvFromTable(table) {\n    const headers = Array.from(table.querySelectorAll('thead th')).map(function (th, index) {\n      const label = th.textContent.replace(\/\\s+\/g, ' ').trim();\n      return label || (index === 0 ? 'Period' : 'Column ' + (index + 1));\n    });\n\n    const rows = Array.from(table.querySelectorAll('tbody tr')).map(function (tr) {\n      return Array.from(tr.querySelectorAll('td')).map(function (td) {\n        return csvEscape(td.textContent);\n      });\n    });\n\n    return [headers.map(csvEscape).join(',')]\n      .concat(rows.map(function (cells) { return cells.join(','); }))\n      .join('\\r\\n');\n  }\n\n  function bindGetDataButton() {\n    const button = root.querySelector('[data-rc-get-data=\"true\"]');\n    const table = root.querySelector('table');\n    if (!button || !table) return;\n\n    button.addEventListener('click', function () {\n      const filename = button.getAttribute('data-rc-get-data-filename') || 'data.csv';\n      const csv = buildCsvFromTable(table);\n      const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = filename;\n      link.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  function bindOptionalControls() {\n    const citySearch = getById('citySearch');\n    if (citySearch && typeof handleSearch === 'function') {\n      citySearch.addEventListener('input', handleSearch);\n    }\n\n    const clearSearch = getById('clearSearch');\n    if (clearSearch && typeof clearCitySearch === 'function') {\n      clearSearch.addEventListener('click', clearCitySearch);\n    }\n\n    const prevPage = getById('prevPage');\n    if (prevPage && typeof changePage === 'function') {\n      prevPage.addEventListener('click', function () {\n        changePage(currentPage - 1);\n      });\n    }\n\n    const nextPage = getById('nextPage');\n    if (nextPage && typeof changePage === 'function') {\n      nextPage.addEventListener('click', function () {\n        changePage(currentPage + 1);\n      });\n    }\n\n    const pageButtons = getById('pageButtons');\n    if (pageButtons && typeof changePage === 'function') {\n      pageButtons.addEventListener('click', function (event) {\n        const button = event.target.closest('[data-rc-page]');\n        if (!button || !pageButtons.contains(button)) return;\n        changePage(Number(button.getAttribute('data-rc-page')));\n      });\n    }\n  }\n\n  function downloadPNG(elementId, filename) {\n        const el = getById(elementId);\n        if (!el) return;\n\n        const rcExportActions = el.querySelector('.export-actions');\n        const rcExportActionsDisplay = rcExportActions ? rcExportActions.style.display : '';\n        if (rcExportActions) { rcExportActions.style.display = 'none'; }\n        html2canvas(el, {\n          scale: 2,\n          useCORS: true,\n          backgroundColor: '#ffffff'\n        }).then(function (canvas) {\n          if (rcExportActions) { rcExportActions.style.display = rcExportActionsDisplay; }\n          const link = document.createElement('a');\n          link.href = canvas.toDataURL('image\/png');\n          link.download = filename;\n          link.click();\n        });\n      }\n\n  function initVisual() {\n    bindDownloadButton();\n    bindGetDataButton();\n    bindOptionalControls();\n    \/\/ Static visual: no render function needed.\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVisual, { once: true });\n  } else {\n    initVisual();\n  }\n})();\n<\/script>\n\n\n\n\n<p>That said, <span data-contrast=\"auto\">smaller apartments are still the most&nbsp;popular&nbsp;among developers.&nbsp;In fact, one-bedroom apartments and studios continue to dominate, accounting for a combined 52.9% of apartments in 2025.&nbsp;<\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">Meanwhile, two- and three-bedroom apartments account for a slightly smaller share than they did a decade ago:&nbsp;Two-bedrooms&nbsp;make up 39.5% of new apartments, while three-bedrooms&nbsp;represent&nbsp;7.1%.&nbsp;<\/span><\/p>\n\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Muli:ital,wght@0,400;0,600;0,700;1,400&display=swap');\n\n#rc-evolution-unit-type {\n      --purple: #8227BE;\n      --purple-dark: #6f21a3;\n      --text: #424141;\n      --muted: #6b7280;\n      --grid: #dfe7eb;\n      --panel-bg: #f7f2fb;\n      --border: #e5e7eb;\n    \n}\n\n#rc-evolution-unit-type {\n      margin: 0;\n      background: #ffffff;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      color: var(--text);\n    \n}\n\n#rc-evolution-unit-type .visual-wrap {\n      max-width: 980px;\n      margin: 16px auto;\n      padding: 0 14px;\n      box-sizing: border-box;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n    \n}\n\n#rc-evolution-unit-type .export-actions {\n      display: flex;\n      gap: 16px;\n      margin-top: 12px;\n\n}\n\n#rc-evolution-unit-type .export-btn {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--muted);\n      text-decoration: underline;\n      cursor: pointer;\n\n}\n\n#rc-evolution-unit-type .export-btn:hover {\n      color: var(--text);\n\n}\n\n#rc-evolution-unit-type .visual-card {\n      background: #ffffff;\n      padding: 12px 14px 10px;\n      border-radius: 10px;\n      border: 1px solid var(--border);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n      box-sizing: border-box;\n    \n}\n\n#rc-evolution-unit-type .visual-title {\n      margin: 0 0 18px;\n      text-align: center;\n      font-size: 22px;\n      font-weight: 700;\n      color: #555555;\n      line-height: 1.2;\n    \n}\n\n#rc-evolution-unit-type .charts-grid {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      column-gap: 34px;\n      row-gap: 20px;\n      padding: 4px 0 2px;\n    \n}\n\n#rc-evolution-unit-type .mini-panel {\n      position: relative;\n    \n}\n\n#rc-evolution-unit-type .mini-svg {\n      width: 100%;\n      aspect-ratio: 460 \/ 172;\n      display: block;\n      overflow: visible;\n\n}\n\n#rc-evolution-unit-type .unit-title {\n      fill: var(--purple);\n      font-size: 14px;\n      font-weight: 700;\n    \n}\n\n#rc-evolution-unit-type .plot-bg {\n      fill: var(--panel-bg);\n    \n}\n\n#rc-evolution-unit-type .grid-line {\n      stroke: var(--grid);\n      stroke-width: 1;\n      shape-rendering: crispEdges;\n    \n}\n\n#rc-evolution-unit-type .axis-label {\n      fill: #777777;\n      font-size: 12px;\n      font-weight: 400;\n    \n}\n\n#rc-evolution-unit-type .mini-line {\n      fill: none;\n      stroke: var(--purple);\n      stroke-width: 3;\n      stroke-linecap: round;\n      stroke-linejoin: round;\n    \n}\n\n#rc-evolution-unit-type .hot-line {\n      fill: none;\n      stroke: transparent;\n      stroke-width: 22;\n      stroke-linecap: round;\n      stroke-linejoin: round;\n      cursor: crosshair;\n    \n}\n\n#rc-evolution-unit-type .hit-area {\n      fill: transparent;\n      cursor: crosshair;\n    \n}\n\n#rc-evolution-unit-type .data-point {\n      fill: #ffffff;\n      stroke: var(--purple);\n      stroke-width: 2;\n      opacity: 0;\n      transition: opacity 0.15s ease;\n    \n}\n\n#rc-evolution-unit-type .mini-panel.is-hovering .data-point {\n      opacity: 1;\n    \n}\n\n#rc-evolution-unit-type .hover-group {\n      pointer-events: none;\n      opacity: 1;\n      transition: opacity 0.12s ease;\n    \n}\n\n#rc-evolution-unit-type .hover-group.is-hidden {\n      opacity: 0;\n    \n}\n\n#rc-evolution-unit-type .hover-dot {\n      fill: var(--purple);\n      stroke: #ffffff;\n      stroke-width: 2;\n    \n}\n\n#rc-evolution-unit-type .tooltip-bg {\n      fill: #ffffff;\n      stroke: #dfe7eb;\n      stroke-width: 1;\n      rx: 5;\n      ry: 5;\n    \n}\n\n#rc-evolution-unit-type .tooltip-text {\n      fill: #222222;\n      font-size: 12px;\n      font-weight: 700;\n    \n}\n\n#rc-evolution-unit-type .bottom-bar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 12px;\n      margin-top: 12px;\n      padding-top: 8px;\n      border-top: 1px solid var(--border);\n      flex-wrap: wrap;\n    \n}\n\n#rc-evolution-unit-type .source {\n      font-size: 11px;\n      color: var(--muted);\n      line-height: 1.35;\n      margin: 0;\n      flex: 1;\n    \n}\n\n#rc-evolution-unit-type .footer-right {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      flex: 0 0 auto;\n    \n}\n\n#rc-evolution-unit-type .brand-logo {\n      height: 22px;\n      width: auto;\n      display: block;\n    \n}\n\n@media (max-width: 700px) {\n#rc-evolution-unit-type .visual-wrap {\n        margin: 10px auto;\n        padding: 0 10px;\n      \n}\n\n#rc-evolution-unit-type .visual-card {\n        padding: 12px 10px 10px;\n      \n}\n\n#rc-evolution-unit-type .visual-title {\n        font-size: 18px;\n        margin-bottom: 14px;\n      \n}\n\n#rc-evolution-unit-type .charts-grid {\n        grid-template-columns: 1fr;\n        gap: 10px;\n\n}\n\n#rc-evolution-unit-type .axis-label {\n        font-size: 11px;\n      \n}\n\n#rc-evolution-unit-type .unit-title {\n        font-size: 13px;\n      \n}\n\n#rc-evolution-unit-type .bottom-bar {\n        flex-direction: column;\n        align-items: flex-start;\n      \n}\n\n#rc-evolution-unit-type .footer-right {\n        justify-content: flex-start;\n      \n}\n}\n<\/style>\n\n<div id=\"rc-evolution-unit-type\" class=\"rc-gutenberg-visual\" data-rc-visual=\"rc-evolution-unit-type\">\n<div class=\"visual-wrap\">\n<div class=\"visual-card\" data-rc-id=\"export-card\" id=\"rc-evolution-unit-type-export-card\">\n<h1 class=\"visual-title\">10-year evolution by unit type<\/h1>\n<div class=\"charts-grid\" data-rc-id=\"chartsGrid\" id=\"rc-evolution-unit-type-chartsGrid\"><\/div>\n<div class=\"bottom-bar\">\n<p class=\"source\">\n          Source: RentCafe analysis of Yardi data as of May 2026 \u2022 All data is accurate as of the date of publication.\n        <\/p>\n<div class=\"footer-right\">\n<a href=\"https:\/\/www.rentcafe.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">\n<img decoding=\"async\" alt=\"RentCafe logo\" class=\"brand-logo\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/11\/RentCafe-logo-for-light-background.png?resize=500,128\"\/>\n<\/a>\n<\/div>\n<\/div>\n<div class=\"export-actions\">\n<button class=\"export-btn\" data-rc-download=\"true\" data-rc-download-filename=\"10-year-evolution-by-unit-type.png\" data-rc-download-target=\"export-card\" type=\"button\">Download PNG<\/button>\n<button class=\"export-btn\" data-rc-get-data=\"true\" data-rc-get-data-filename=\"10-year-evolution-by-unit-type-data.csv\" type=\"button\">Get data<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('rc-evolution-unit-type');\n  if (!root || root.dataset.rcInitialized === 'true') return;\n  root.dataset.rcInitialized = 'true';\n\n  function getById(id) {\n    return root.querySelector('[data-rc-id=\"' + id + '\"]');\n  }\n\n  function loadHtml2Canvas() {\n    if (window.html2canvas) {\n      return Promise.resolve(window.html2canvas);\n    }\n\n    if (window.__rentcafeHtml2CanvasPromise) {\n      return window.__rentcafeHtml2CanvasPromise;\n    }\n\n    window.__rentcafeHtml2CanvasPromise = new Promise(function (resolve, reject) {\n      const existingScript = document.querySelector('script[data-rentcafe-html2canvas=\"true\"]');\n\n      if (existingScript) {\n        existingScript.addEventListener('load', function () {\n          if (window.html2canvas) resolve(window.html2canvas);\n          else reject(new Error('html2canvas loaded but is unavailable.'));\n        }, { once: true });\n        existingScript.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js';\n      script.async = true;\n      script.setAttribute('data-rentcafe-html2canvas', 'true');\n      script.onload = function () {\n        if (window.html2canvas) resolve(window.html2canvas);\n        else reject(new Error('html2canvas loaded but is unavailable.'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n\n    return window.__rentcafeHtml2CanvasPromise;\n  }\n\n  function html2canvas(element, options) {\n    return loadHtml2Canvas().then(function (html2canvasLibrary) {\n      return html2canvasLibrary(element, options);\n    });\n  }\n\n  function bindDownloadButton() {\n    const button = root.querySelector('[data-rc-download=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const target = button.getAttribute('data-rc-download-target') || 'export-card';\n      const filename = button.getAttribute('data-rc-download-filename');\n\n      if (filename) {\n        downloadPNG(target, filename);\n      } else {\n        downloadPNG(target);\n      }\n    });\n  }\n\n  function csvEscape(value) {\n    const str = String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n    if (\/[\",\\n]\/.test(str)) {\n      return '\"' + str.replace(\/\"\/g, '\"\"') + '\"';\n    }\n    return str;\n  }\n\n  function buildCsv() {\n    const years = charts[0].values.map(function (point) { return point.year; });\n    const header = ['Year'].concat(charts.map(function (chart) { return chart.name + ' (sq. ft.)'; }));\n    const lines = [header.map(csvEscape).join(',')];\n\n    years.forEach(function (year, index) {\n      const row = [year].concat(charts.map(function (chart) { return chart.values[index].value; }));\n      lines.push(row.map(csvEscape).join(','));\n    });\n\n    return lines.join('\\r\\n');\n  }\n\n  function bindGetDataButton() {\n    const button = root.querySelector('[data-rc-get-data=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const filename = button.getAttribute('data-rc-get-data-filename') || 'data.csv';\n      const csv = buildCsv();\n      const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = filename;\n      link.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  function bindOptionalControls() {\n    const citySearch = getById('citySearch');\n    if (citySearch && typeof handleSearch === 'function') {\n      citySearch.addEventListener('input', handleSearch);\n    }\n\n    const clearSearch = getById('clearSearch');\n    if (clearSearch && typeof clearCitySearch === 'function') {\n      clearSearch.addEventListener('click', clearCitySearch);\n    }\n\n    const prevPage = getById('prevPage');\n    if (prevPage && typeof changePage === 'function') {\n      prevPage.addEventListener('click', function () {\n        changePage(currentPage - 1);\n      });\n    }\n\n    const nextPage = getById('nextPage');\n    if (nextPage && typeof changePage === 'function') {\n      nextPage.addEventListener('click', function () {\n        changePage(currentPage + 1);\n      });\n    }\n\n    const pageButtons = getById('pageButtons');\n    if (pageButtons && typeof changePage === 'function') {\n      pageButtons.addEventListener('click', function (event) {\n        const button = event.target.closest('[data-rc-page]');\n        if (!button || !pageButtons.contains(button)) return;\n        changePage(Number(button.getAttribute('data-rc-page')));\n      });\n    }\n  }\n\n  const charts = [\n        {\n          name: 'Studio',\n          values: [\n            { year: 2016, value: 479 },\n            { year: 2017, value: 478 },\n            { year: 2018, value: 480 },\n            { year: 2019, value: 481 },\n            { year: 2020, value: 476 },\n            { year: 2021, value: 472 },\n            { year: 2022, value: 463 },\n            { year: 2023, value: 444 },\n            { year: 2024, value: 454 },\n            { year: 2025, value: 460 }\n          ],\n          yMin: 440,\n          yMax: 485,\n          yTicks: [460, 480]\n        },\n        {\n          name: '1 Bedroom',\n          values: [\n            { year: 2016, value: 741 },\n            { year: 2017, value: 738 },\n            { year: 2018, value: 742 },\n            { year: 2019, value: 738 },\n            { year: 2020, value: 738 },\n            { year: 2021, value: 737 },\n            { year: 2022, value: 727 },\n            { year: 2023, value: 729 },\n            { year: 2024, value: 732 },\n            { year: 2025, value: 735 }\n          ],\n          yMin: 725,\n          yMax: 745,\n          yTicks: [730, 735, 740]\n        },\n        {\n          name: '2 Bedroom',\n          values: [\n            { year: 2016, value: 1098 },\n            { year: 2017, value: 1099 },\n            { year: 2018, value: 1104 },\n            { year: 2019, value: 1098 },\n            { year: 2020, value: 1098 },\n            { year: 2021, value: 1100 },\n            { year: 2022, value: 1086 },\n            { year: 2023, value: 1091 },\n            { year: 2024, value: 1091 },\n            { year: 2025, value: 1095 }\n          ],\n          yMin: 1085,\n          yMax: 1105,\n          yTicks: [1090, 1100]\n        },\n        {\n          name: '3 Bedroom',\n          values: [\n            { year: 2016, value: 1342 },\n            { year: 2017, value: 1342 },\n            { year: 2018, value: 1333 },\n            { year: 2019, value: 1337 },\n            { year: 2020, value: 1343 },\n            { year: 2021, value: 1348 },\n            { year: 2022, value: 1319 },\n            { year: 2023, value: 1341 },\n            { year: 2024, value: 1327 },\n            { year: 2025, value: 1355 }\n          ],\n          yMin: 1315,\n          yMax: 1360,\n          yTicks: [1320, 1340, 1350]\n        }\n      ];\n\n      function createSvgElement(tag, attrs = {}) {\n        const element = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', tag);\n\n        Object.entries(attrs).forEach(([key, value]) => {\n          element.setAttribute(key, value);\n        });\n\n        return element;\n      }\n\n      function formatNumber(value) {\n        return new Intl.NumberFormat('en-US').format(value);\n      }\n\n      function catmullRomToBezier(points) {\n        if (points.length < 2) return '';\n\n        let d = `M ${points[0].x},${points[0].y}`;\n\n        for (let i = 0; i < points.length - 1; i++) {\n          const p0 = points[i - 1] || points[i];\n          const p1 = points[i];\n          const p2 = points[i + 1];\n          const p3 = points[i + 2] || p2;\n\n          const cp1x = p1.x + (p2.x - p0.x) \/ 6;\n          const cp1y = p1.y + (p2.y - p0.y) \/ 6;\n          const cp2x = p2.x - (p3.x - p1.x) \/ 6;\n          const cp2y = p2.y - (p3.y - p1.y) \/ 6;\n\n          d += ` C ${cp1x},${cp1y} ${cp2x},${cp2y} ${p2.x},${p2.y}`;\n        }\n\n        return d;\n      }\n\n      function renderMiniChart(chart) {\n        const panel = document.createElement('div');\n        panel.className = 'mini-panel';\n\n        const svg = createSvgElement('svg', {\n          class: 'mini-svg',\n          viewBox: '0 0 460 172',\n          role: 'img',\n          'aria-label': `${chart.name} apartment size trend from 2016 to 2025`\n        });\n\n        panel.appendChild(svg);\n\n        const width = 460;\n        const height = 172;\n\n        const margin = {\n          top: 26,\n          right: 12,\n          bottom: 28,\n          left: 70\n        };\n\n        const innerWidth = width - margin.left - margin.right;\n        const innerHeight = height - margin.top - margin.bottom;\n\n        const x = (i) => margin.left + (i \/ (chart.values.length - 1)) * innerWidth;\n        const y = (value) => margin.top + ((chart.yMax - value) \/ (chart.yMax - chart.yMin)) * innerHeight;\n\n        const points = chart.values.map((d, i) => ({\n          x: x(i),\n          y: y(d.value),\n          year: d.year,\n          value: d.value\n        }));\n\n        svg.appendChild(createSvgElement('rect', {\n          x: margin.left,\n          y: margin.top,\n          width: innerWidth,\n          height: innerHeight,\n          class: 'plot-bg'\n        }));\n\n        const title = createSvgElement('text', {\n          x: margin.left,\n          y: 16,\n          class: 'unit-title'\n        });\n\n        title.textContent = chart.name;\n        svg.appendChild(title);\n\n        chart.yTicks.forEach((tick, tickIndex) => {\n          const yPos = y(tick);\n\n          svg.appendChild(createSvgElement('line', {\n            x1: margin.left,\n            x2: width - margin.right,\n            y1: yPos,\n            y2: yPos,\n            class: 'grid-line'\n          }));\n\n          const label = createSvgElement('text', {\n            x: margin.left - 8,\n            y: yPos + 4,\n            'text-anchor': 'end',\n            class: 'axis-label'\n          });\n\n          label.textContent = tickIndex === chart.yTicks.length - 1\n            ? `${formatNumber(tick)} sq. ft.`\n            : formatNumber(tick);\n\n          svg.appendChild(label);\n        });\n\n        const firstYear = chart.values[0].year;\n        const lastYear = chart.values[chart.values.length - 1].year;\n\n        const startYear = createSvgElement('text', {\n          x: margin.left,\n          y: height - 8,\n          'text-anchor': 'middle',\n          class: 'axis-label'\n        });\n\n        startYear.textContent = firstYear;\n        svg.appendChild(startYear);\n\n        const endYear = createSvgElement('text', {\n          x: width - margin.right,\n          y: height - 8,\n          'text-anchor': 'end',\n          class: 'axis-label'\n        });\n\n        endYear.textContent = lastYear;\n        svg.appendChild(endYear);\n\n        const linePath = catmullRomToBezier(points);\n\n        svg.appendChild(createSvgElement('path', {\n          d: linePath,\n          class: 'mini-line'\n        }));\n\n        points.forEach((point) => {\n          svg.appendChild(createSvgElement('circle', {\n            cx: point.x,\n            cy: point.y,\n            r: 3.3,\n            class: 'data-point'\n          }));\n        });\n\n        const hoverGroup = createSvgElement('g', {\n          class: 'hover-group is-hidden'\n        });\n\n        const hoverDot = createSvgElement('circle', {\n          r: 5,\n          class: 'hover-dot'\n        });\n\n        const tooltipBg = createSvgElement('rect', {\n          class: 'tooltip-bg'\n        });\n\n        const tooltipText = createSvgElement('text', {\n          class: 'tooltip-text'\n        });\n\n        hoverGroup.appendChild(tooltipBg);\n        hoverGroup.appendChild(hoverDot);\n        hoverGroup.appendChild(tooltipText);\n        svg.appendChild(hoverGroup);\n\n        function updateHover(event) {\n          panel.classList.add('is-hovering');\n          hoverGroup.classList.remove('is-hidden');\n\n          const pt = svg.createSVGPoint();\n          const sourceEvent = event.touches ? event.touches[0] : event;\n\n          pt.x = sourceEvent.clientX;\n          pt.y = sourceEvent.clientY;\n\n          const cursor = pt.matrixTransform(svg.getScreenCTM().inverse());\n          const rawIndex = Math.round(((cursor.x - margin.left) \/ innerWidth) * (points.length - 1));\n          const nearestIndex = Math.max(0, Math.min(points.length - 1, rawIndex));\n          const point = points[nearestIndex];\n\n          hoverDot.setAttribute('cx', point.x);\n          hoverDot.setAttribute('cy', point.y);\n\n          let labelX = point.x;\n          let labelY = point.y - 14;\n          let anchor = 'middle';\n\n          if (point.x < margin.left + 90) {\n            labelX = point.x + 10;\n            anchor = 'start';\n          } else if (point.x > width - margin.right - 90) {\n            labelX = point.x - 10;\n            anchor = 'end';\n          }\n\n          if (labelY < margin.top + 12) {\n            labelY = point.y + 24;\n          }\n\n          tooltipText.setAttribute('x', labelX);\n          tooltipText.setAttribute('y', labelY);\n          tooltipText.setAttribute('text-anchor', anchor);\n          tooltipText.textContent = `${point.year}: ${formatNumber(point.value)} sq. ft.`;\n\n          const bbox = tooltipText.getBBox();\n          const padX = 7;\n          const padY = 4;\n\n          tooltipBg.setAttribute('x', bbox.x - padX);\n          tooltipBg.setAttribute('y', bbox.y - padY);\n          tooltipBg.setAttribute('width', bbox.width + padX * 2);\n          tooltipBg.setAttribute('height', bbox.height + padY * 2);\n        }\n\n        function hideHover() {\n          panel.classList.remove('is-hovering');\n          hoverGroup.classList.add('is-hidden');\n        }\n\n        const hotLine = createSvgElement('path', {\n          d: linePath,\n          class: 'hot-line'\n        });\n\n        const hitArea = createSvgElement('rect', {\n          x: margin.left,\n          y: margin.top,\n          width: innerWidth,\n          height: innerHeight,\n          class: 'hit-area'\n        });\n\n        svg.appendChild(hotLine);\n        svg.appendChild(hitArea);\n\n        hotLine.addEventListener('mousemove', updateHover);\n        hitArea.addEventListener('mousemove', updateHover);\n        hotLine.addEventListener('mouseenter', updateHover);\n        hitArea.addEventListener('mouseenter', updateHover);\n\n        svg.addEventListener('mouseleave', hideHover);\n\n        hitArea.addEventListener('touchstart', updateHover, { passive: true });\n        hitArea.addEventListener('touchmove', updateHover, { passive: true });\n\n        return panel;\n      }\n\n      function renderCharts() {\n        const grid = getById('chartsGrid');\n        grid.innerHTML = '';\n\n        charts.forEach((chart) => {\n          grid.appendChild(renderMiniChart(chart));\n        });\n      }\n\n      function downloadPNG(elementId, filename) {\n        const el = getById(elementId);\n        if (!el) return;\n\n        const rcExportActions = el.querySelector('.export-actions');\n        const rcExportActionsDisplay = rcExportActions ? rcExportActions.style.display : '';\n        if (rcExportActions) { rcExportActions.style.display = 'none'; }\n        html2canvas(el, {\n          scale: 2,\n          useCORS: true,\n          backgroundColor: '#ffffff'\n        }).then(function (canvas) {\n          if (rcExportActions) { rcExportActions.style.display = rcExportActionsDisplay; }\n          const link = document.createElement('a');\n          link.href = canvas.toDataURL('image\/png');\n          link.download = filename;\n          link.click();\n        });\n      }\n\n  function initVisual() {\n    bindDownloadButton();\n    bindGetDataButton();\n    bindOptionalControls();\n    if (typeof renderCharts === 'function') renderCharts();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVisual, { once: true });\n  } else {\n    initVisual();\n  }\n})();\n<\/script>\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-where-can-you-find-the-most-spacious-apartments-nbsp\"><span data-contrast=\"auto\">Where can you find the most spacious apartments?&nbsp;<\/span><\/h2>\n\n\n\n<p>If bigger floor plans are a priority, look to the South. Specifically, three Florida cities rank among the top five for largest apartment size, with Tallahassee and Gainesville taking the top spots.<\/p>\n\n\n\n<p><span data-contrast=\"auto\">First, in Tallahassee, FL, new apartments average 1,156 square feet. Although floor plans shrank by 27 square feet compared to 10 years ago \u2014 roughly the size of a typical walk-in closet \u2014 you&#8217;ll still find more living space here than in any other city in the country. &nbsp;<\/span><\/p>\n\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Muli:ital,wght@0,400;0,600;0,700;1,400&display=swap');\n\n#rc-top-largest-apartments {\n      --green: #b7d566;\n      --purple-dark: #6f21a3;\n      --red: #EC1E51;\n      --text: #424141;\n      --muted: #6b7280;\n      --border: #e5e7eb;\n      --row: #f8fafc;\n      --track: #e9e9e9;\n}\n\n#rc-top-largest-apartments {\n      margin: 0;\n      background: #ffffff;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      color: var(--text);\n\n}\n\n#rc-top-largest-apartments .visual-wrap {\n      max-width: 980px;\n      margin: 16px auto;\n      padding: 0 14px;\n      box-sizing: border-box;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n\n}\n\n#rc-top-largest-apartments .export-actions {\n      display: flex;\n      gap: 16px;\n      margin-top: 12px;\n\n}\n\n#rc-top-largest-apartments .export-btn {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--muted);\n      text-decoration: underline;\n      cursor: pointer;\n\n}\n\n#rc-top-largest-apartments .export-btn:hover {\n      color: var(--text);\n\n}\n\n#rc-top-largest-apartments .visual-card {\n      background: #ffffff;\n      padding: 12px 14px 10px;\n      border-radius: 10px;\n      border: 1px solid var(--border);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n      box-sizing: border-box;\n\n}\n\n#rc-top-largest-apartments .visual-title {\n      margin: 0 0 24px;\n      text-align: center;\n      font-size: 24px;\n      font-weight: 700;\n      color: #555555;\n      line-height: 1.2;\n\n}\n\n#rc-top-largest-apartments .table-wrap {\n      width: 100%;\n      overflow-x: auto;\n\n}\n\n#rc-top-largest-apartments .visual-table {\n      width: 100%;\n      min-width: 850px;\n      border-collapse: collapse;\n      table-layout: fixed;\n\n}\n\n#rc-top-largest-apartments .visual-table th,\n#rc-top-largest-apartments .visual-table td {\n      padding: 6px 8px;\n      text-align: center;\n      font-size: 13px;\n      line-height: 1.15;\n      color: #222222;\n      font-weight: 400;\n      border-bottom: 1px solid #e4e4e4;\n\n}\n\n#rc-top-largest-apartments .visual-table thead th {\n      font-size: 14px;\n      font-weight: 700;\n      color: #222222;\n      border-bottom: 2px solid #333333;\n      padding-bottom: 9px;\n      vertical-align: bottom;\n\n}\n\n#rc-top-largest-apartments .visual-table tbody tr:nth-child(even) {\n      background: var(--row);\n\n}\n\n#rc-top-largest-apartments .visual-table th:nth-child(1),\n#rc-top-largest-apartments .visual-table td:nth-child(1) {\n      width: 58px;\n\n}\n\n#rc-top-largest-apartments .visual-table th:nth-child(2),\n#rc-top-largest-apartments .visual-table td:nth-child(2) {\n      width: 200px;\n      text-align: left;\n\n}\n\n#rc-top-largest-apartments .visual-table th:nth-child(3),\n#rc-top-largest-apartments .visual-table td:nth-child(3) {\n      width: 190px;\n\n}\n\n#rc-top-largest-apartments .visual-table th:nth-child(4),\n#rc-top-largest-apartments .visual-table td:nth-child(4) {\n      width: 250px;\n\n}\n\n#rc-top-largest-apartments .visual-table th:nth-child(5),\n#rc-top-largest-apartments .visual-table td:nth-child(5) {\n      width: 112px;\n      padding-left: 4px;\n      padding-right: 4px;\n\n}\n\n#rc-top-largest-apartments .visual-table th:nth-child(4) .header-wrap {\n      display: inline-block;\n      max-width: 190px;\n      line-height: 1.08;\n      white-space: normal;\n\n}\n\n#rc-top-largest-apartments .visual-table th:nth-child(5) .header-wrap {\n      display: inline-block;\n      max-width: 96px;\n      line-height: 1.08;\n      white-space: normal;\n\n}\n\n#rc-top-largest-apartments .net-change-cell {\n      padding-left: 12px;\n      padding-right: 12px;\n\n}\n\n#rc-top-largest-apartments .net-change-track {\n      position: relative;\n      width: 210px;\n      height: 19px;\n      margin: 0 auto;\n      background: var(--track);\n      overflow: visible;\n\n}\n\n#rc-top-largest-apartments .zero-line {\n      position: absolute;\n      left: 50%;\n      top: 0;\n      bottom: 0;\n      width: 1px;\n      background: #c9c9c9;\n      z-index: 1;\n\n}\n\n#rc-top-largest-apartments .bar-fill {\n      position: absolute;\n      top: 0;\n      height: 100%;\n      z-index: 2;\n\n}\n\n#rc-top-largest-apartments .bar-fill-negative {\n      right: 50%;\n      background: var(--red);\n      border-radius: 2px 0 0 2px;\n\n}\n\n#rc-top-largest-apartments .bar-fill-positive {\n      left: 50%;\n      background: var(--green);\n      border-radius: 0 2px 2px 0;\n\n}\n\n#rc-top-largest-apartments .net-label {\n      position: absolute;\n      top: 50%;\n      transform: translateY(-50%);\n      z-index: 4;\n      font-size: 12px;\n      line-height: 1;\n      font-weight: 700;\n      white-space: nowrap;\n\n}\n\n#rc-top-largest-apartments .net-label.inside {\n      left: calc(var(--bar-edge) - 6px);\n      transform: translate(-100%, -50%);\n      color: #ffffff;\n\n}\n\n#rc-top-largest-apartments .net-label.outside {\n      left: calc(var(--bar-edge) + 6px);\n      color: #333333;\n\n}\n\n#rc-top-largest-apartments .net-label.inside-left {\n      left: calc(var(--bar-edge) + 6px);\n      color: #ffffff;\n\n}\n\n#rc-top-largest-apartments .net-label.outside-left {\n      left: calc(var(--bar-edge) - 6px);\n      transform: translate(-100%, -50%);\n      color: #333333;\n\n}\n\n#rc-top-largest-apartments .notes {\n      margin-top: 16px;\n      font-size: 11px;\n      line-height: 1.35;\n      color: #666666;\n      font-style: italic;\n\n}\n\n#rc-top-largest-apartments .notes p {\n      margin: 0;\n\n}\n\n#rc-top-largest-apartments .bottom-bar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 12px;\n      margin-top: 10px;\n      padding-top: 8px;\n      border-top: 1px solid var(--border);\n      flex-wrap: wrap;\n\n}\n\n#rc-top-largest-apartments .source {\n      font-size: 11px;\n      color: var(--muted);\n      line-height: 1.35;\n      margin: 0;\n      flex: 1;\n\n}\n\n#rc-top-largest-apartments .footer-right {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      flex: 0 0 auto;\n\n}\n\n#rc-top-largest-apartments .brand-logo {\n      height: 22px;\n      width: auto;\n      display: block;\n\n}\n\n@media (max-width: 700px) {\n#rc-top-largest-apartments .visual-wrap {\n        margin: 10px auto;\n        padding: 0 10px;\n\n}\n\n#rc-top-largest-apartments .visual-card {\n        padding: 12px 10px 10px;\n\n}\n\n#rc-top-largest-apartments .visual-title {\n        font-size: 18px;\n        margin-bottom: 18px;\n\n}\n\n#rc-top-largest-apartments .table-wrap {\n        overflow-x: visible;\n\n}\n\n#rc-top-largest-apartments .visual-table {\n        display: block;\n        width: 100%;\n        min-width: 0;\n\n}\n\n#rc-top-largest-apartments .visual-table thead {\n        display: none;\n\n}\n\n#rc-top-largest-apartments .visual-table tbody {\n        display: block;\n\n}\n\n#rc-top-largest-apartments .visual-table tbody tr {\n        display: grid;\n        grid-template-columns: auto 1fr auto;\n        column-gap: 10px;\n        row-gap: 3px;\n        align-items: baseline;\n        padding: 10px 10px 12px 12px;\n        border-bottom: 1px solid var(--border);\n        border-left: 3px solid var(--border);\n        background: #ffffff !important;\n\n}\n\n#rc-top-largest-apartments .visual-table tbody tr:last-child {\n        border-bottom: none;\n\n}\n\n#rc-top-largest-apartments .visual-table tbody tr.row-positive {\n        border-left-color: var(--green);\n\n}\n\n#rc-top-largest-apartments .visual-table tbody tr.row-negative {\n        border-left-color: var(--red);\n\n}\n\n#rc-top-largest-apartments .visual-table td {\n        border-bottom: none;\n        padding: 0;\n        font-size: 13px;\n        white-space: normal;\n\n}\n\n#rc-top-largest-apartments .visual-table td:nth-child(1) {\n        grid-column: 1;\n        grid-row: 1;\n        align-self: center;\n        font-weight: 800;\n        font-size: 15px;\n        color: var(--muted);\n\n}\n\n#rc-top-largest-apartments .visual-table td:nth-child(1)::before {\n        content: \"#\";\n\n}\n\n#rc-top-largest-apartments .visual-table td:nth-child(2) {\n        grid-column: 2;\n        grid-row: 1;\n        text-align: left;\n        font-weight: 700;\n        font-size: 14.5px;\n        color: #1a1a1a;\n\n}\n\n#rc-top-largest-apartments .visual-table td:nth-child(5) {\n        grid-column: 3;\n        grid-row: 1;\n        align-self: center;\n        text-align: right;\n        font-weight: 700;\n        font-size: 12.5px;\n        color: #333333;\n\n}\n\n#rc-top-largest-apartments .visual-table td:nth-child(3) {\n        grid-column: 2 \/ 4;\n        grid-row: 2;\n        text-align: left;\n        font-size: 11.5px;\n        color: var(--muted);\n\n}\n\n#rc-top-largest-apartments .visual-table td:nth-child(3)::before {\n        content: attr(data-label) \": \";\n\n}\n\n#rc-top-largest-apartments .visual-table td.net-change-cell {\n        grid-column: 1 \/ 4;\n        grid-row: 3;\n        padding-top: 6px;\n\n}\n\n#rc-top-largest-apartments .net-change-track {\n        width: 100%;\n\n}\n\n#rc-top-largest-apartments .notes {\n        font-size: 10px;\n\n}\n\n#rc-top-largest-apartments .bottom-bar {\n        flex-direction: column;\n        align-items: flex-start;\n\n}\n\n#rc-top-largest-apartments .footer-right {\n        justify-content: flex-start;\n\n}\n}\n<\/style>\n\n<div id=\"rc-top-largest-apartments\" class=\"rc-gutenberg-visual\" data-rc-visual=\"rc-top-largest-apartments\">\n<div class=\"visual-wrap\">\n<div class=\"visual-card\" data-rc-id=\"export-card\" id=\"rc-top-largest-apartments-export-card\">\n<h1 class=\"visual-title\">Top 20 cities with the largest new apartments<\/h1>\n<div class=\"table-wrap\">\n<table aria-label=\"Top 20 cities with the largest new apartments\" class=\"visual-table\">\n<thead>\n<tr>\n<th scope=\"col\">Rank<\/th>\n<th scope=\"col\">City, state<\/th>\n<th scope=\"col\">Average size of new apartments<\/th>\n<th scope=\"col\">10-year net change<\/th>\n<th scope=\"col\"><span class=\"header-wrap\">10-year<br\/>percentage<br\/>change<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody data-rc-id=\"tableBody\" id=\"rc-top-largest-apartments-tableBody\"><\/tbody>\n<\/table>\n<\/div>\n<div class=\"notes\">\n<p>Average size is in square feet.<\/p>\n<p>To ensure a statistically relevant sample size at city level, new apartments refer to completed units built between 2016 and 2025.<\/p>\n<p>The change is calculated by comparing the average size of new apartments with the average size of apartments completed between 2006 and 2015.<\/p>\n<\/div>\n<div class=\"bottom-bar\">\n<p class=\"source\">\n          Source: RentCafe analysis of Yardi data as of May 2026 \u2022 All data is accurate as of the date of publication.\n        <\/p>\n<div class=\"footer-right\">\n<a href=\"https:\/\/www.rentcafe.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">\n<img decoding=\"async\" alt=\"RentCafe logo\" class=\"brand-logo\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/11\/RentCafe-logo-for-light-background.png?resize=500,128\"\/>\n<\/a>\n<\/div>\n<\/div>\n<div class=\"export-actions\">\n<button class=\"export-btn\" data-rc-download=\"true\" data-rc-download-filename=\"top-20-cities-largest-new-apartments.png\" data-rc-download-target=\"export-card\" type=\"button\">Download PNG<\/button>\n<button class=\"export-btn\" data-rc-get-data=\"true\" data-rc-get-data-filename=\"top-20-largest-new-apartments-data.csv\" type=\"button\">Get data<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('rc-top-largest-apartments');\n  if (!root || root.dataset.rcInitialized === 'true') return;\n  root.dataset.rcInitialized = 'true';\n\n  function getById(id) {\n    return root.querySelector('[data-rc-id=\"' + id + '\"]');\n  }\n\n  function loadHtml2Canvas() {\n    if (window.html2canvas) {\n      return Promise.resolve(window.html2canvas);\n    }\n\n    if (window.__rentcafeHtml2CanvasPromise) {\n      return window.__rentcafeHtml2CanvasPromise;\n    }\n\n    window.__rentcafeHtml2CanvasPromise = new Promise(function (resolve, reject) {\n      const existingScript = document.querySelector('script[data-rentcafe-html2canvas=\"true\"]');\n\n      if (existingScript) {\n        existingScript.addEventListener('load', function () {\n          if (window.html2canvas) resolve(window.html2canvas);\n          else reject(new Error('html2canvas loaded but is unavailable.'));\n        }, { once: true });\n        existingScript.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js';\n      script.async = true;\n      script.setAttribute('data-rentcafe-html2canvas', 'true');\n      script.onload = function () {\n        if (window.html2canvas) resolve(window.html2canvas);\n        else reject(new Error('html2canvas loaded but is unavailable.'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n\n    return window.__rentcafeHtml2CanvasPromise;\n  }\n\n  function html2canvas(element, options) {\n    return loadHtml2Canvas().then(function (html2canvasLibrary) {\n      return html2canvasLibrary(element, options);\n    });\n  }\n\n  function bindDownloadButton() {\n    const button = root.querySelector('[data-rc-download=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const target = button.getAttribute('data-rc-download-target') || 'export-card';\n      const filename = button.getAttribute('data-rc-download-filename');\n\n      if (filename) {\n        downloadPNG(target, filename);\n      } else {\n        downloadPNG(target);\n      }\n    });\n  }\n\n  function csvEscape(value) {\n    const str = String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n    if (\/[\",\\n]\/.test(str)) {\n      return '\"' + str.replace(\/\"\/g, '\"\"') + '\"';\n    }\n    return str;\n  }\n\n  function buildCsv() {\n    const header = ['Rank', 'City, state', 'Average size of new apartments (sq. ft.)', '10-year net change (sq. ft.)', '10-year percentage change'];\n    const lines = [header.map(csvEscape).join(',')];\n\n    rows.forEach(function (row) {\n      lines.push([row.rank, row.city, row.size, row.net, row.pct].map(csvEscape).join(','));\n    });\n\n    return lines.join('\\r\\n');\n  }\n\n  function bindGetDataButton() {\n    const button = root.querySelector('[data-rc-get-data=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const filename = button.getAttribute('data-rc-get-data-filename') || 'data.csv';\n      const csv = buildCsv();\n      const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = filename;\n      link.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  function bindOptionalControls() {\n    const citySearch = getById('citySearch');\n    if (citySearch && typeof handleSearch === 'function') {\n      citySearch.addEventListener('input', handleSearch);\n    }\n\n    const clearSearch = getById('clearSearch');\n    if (clearSearch && typeof clearCitySearch === 'function') {\n      clearSearch.addEventListener('click', clearCitySearch);\n    }\n\n    const prevPage = getById('prevPage');\n    if (prevPage && typeof changePage === 'function') {\n      prevPage.addEventListener('click', function () {\n        changePage(currentPage - 1);\n      });\n    }\n\n    const nextPage = getById('nextPage');\n    if (nextPage && typeof changePage === 'function') {\n      nextPage.addEventListener('click', function () {\n        changePage(currentPage + 1);\n      });\n    }\n\n    const pageButtons = getById('pageButtons');\n    if (pageButtons && typeof changePage === 'function') {\n      pageButtons.addEventListener('click', function (event) {\n        const button = event.target.closest('[data-rc-page]');\n        if (!button || !pageButtons.contains(button)) return;\n        changePage(Number(button.getAttribute('data-rc-page')));\n      });\n    }\n  }\n\n  const rows = [\n        { rank: 1, city: 'Tallahassee, FL', size: 1156, net: -27, pct: '-2%' },\n        { rank: 2, city: 'Gainesville, FL', size: 1126, net: 29, pct: '3%' },\n        { rank: 3, city: 'Baton Rouge, LA', size: 1042, net: 11, pct: '1%' },\n        { rank: 4, city: 'Knoxville, TN', size: 1032, net: -44, pct: '-4%' },\n        { rank: 5, city: 'Fort Myers, FL', size: 1032, net: -13, pct: '-1%' },\n        { rank: 6, city: 'Virginia Beach, VA', size: 1020, net: -17, pct: '-2%' },\n        { rank: 7, city: 'Greensboro, NC', size: 1017, net: -19, pct: '-2%' },\n        { rank: 8, city: 'Wilmington, NC', size: 1014, net: 8, pct: '1%' },\n        { rank: 9, city: 'Columbia, SC', size: 1011, net: -154, pct: '-13%' },\n        { rank: 10, city: 'Overland Park, KS', size: 983, net: -56, pct: '-5%' },\n        { rank: 11, city: 'Lubbock, TX', size: 982, net: -75, pct: '-7%' },\n        { rank: 12, city: 'Fresno, CA', size: 980, net: -24, pct: '-2%' },\n        { rank: 13, city: 'Louisville, KY', size: 979, net: -72, pct: '-7%' },\n        { rank: 14, city: 'Henderson, NV', size: 979, net: -46, pct: '-4%' },\n        { rank: 15, city: 'Jacksonville, FL', size: 972, net: -80, pct: '-8%' },\n        { rank: 16, city: 'Orlando, FL', size: 971, net: -74, pct: '-7%' },\n        { rank: 17, city: 'Scottsdale, AZ', size: 962, net: -11, pct: '-1%' },\n        { rank: 18, city: 'Corpus Christi, TX', size: 958, net: -72, pct: '-7%' },\n        { rank: 19, city: 'Greenville, SC', size: 957, net: -80, pct: '-8%' },\n        { rank: 20, city: 'Las Vegas, NV', size: 954, net: -7, pct: '-1%' }\n      ];\n\n      function formatNumber(value) {\n        return new Intl.NumberFormat('en-US').format(value);\n      }\n\n      function renderNetChangeBar(value, maxMagnitude) {\n        const isNegative = value < 0;\n        const widthPct = maxMagnitude ? (Math.abs(value) \/ maxMagnitude) * 50 : 0;\n        const edgePct = isNegative ? (50 - widthPct) : (50 + widthPct);\n        const insideThreshold = 20;\n        const placement = widthPct >= insideThreshold\n          ? (isNegative ? 'inside-left' : 'inside')\n          : (isNegative ? 'outside-left' : 'outside');\n        const barClass = isNegative ? 'bar-fill bar-fill-negative' : 'bar-fill bar-fill-positive';\n\n        return `\n          <div class=\"net-change-track\" style=\"--bar-edge: ${edgePct.toFixed(2)}%;\">\n            <div class=\"zero-line\"><\/div>\n            <div class=\"${barClass}\" style=\"width: ${widthPct.toFixed(2)}%;\"><\/div>\n            <span class=\"net-label ${placement}\">${formatNumber(value)}<\/span>\n          <\/div>\n        `;\n      }\n\n      function renderTable() {\n        const tableBody = getById('tableBody');\n        const maxMagnitude = Math.max(...rows.map(row => Math.abs(row.net)));\n\n        tableBody.innerHTML = rows.map(row => {\n          const rowDirClass = row.net > 0 ? 'row-positive' : row.net < 0 ? 'row-negative' : '';\n\n          return `\n          <tr class=\"${rowDirClass}\">\n            <td>${row.rank}<\/td>\n            <td>${row.city}<\/td>\n            <td data-label=\"Avg. size\">${formatNumber(row.size)}<\/td>\n            <td class=\"net-change-cell\" data-label=\"10-year net change\">${renderNetChangeBar(row.net, maxMagnitude)}<\/td>\n            <td>${row.pct}<\/td>\n          <\/tr>\n        `;\n        }).join('');\n      }\n\n      function downloadPNG(elementId, filename) {\n        const el = getById(elementId);\n        if (!el) return;\n\n        const rcExportActions = el.querySelector('.export-actions');\n        const rcExportActionsDisplay = rcExportActions ? rcExportActions.style.display : '';\n        if (rcExportActions) { rcExportActions.style.display = 'none'; }\n        html2canvas(el, {\n          scale: 2,\n          useCORS: true,\n          backgroundColor: '#ffffff'\n        }).then(function (canvas) {\n          if (rcExportActions) { rcExportActions.style.display = rcExportActionsDisplay; }\n          const link = document.createElement('a');\n          link.href = canvas.toDataURL('image\/png');\n          link.download = filename;\n          link.click();\n        });\n      }\n\n  function initVisual() {\n    bindDownloadButton();\n    bindGetDataButton();\n    bindOptionalControls();\n    if (typeof renderTable === 'function') renderTable();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVisual, { once: true });\n  } else {\n    initVisual();\n  }\n})();\n<\/script>\n\n\n\n\n<p>Next, <span data-contrast=\"auto\">Gainesville, FL,&nbsp;ranks second, with&nbsp;units&nbsp;averaging 1,126 square feet&nbsp;\u2014 an increase&nbsp;of&nbsp;29 square feet&nbsp;compared to a decade ago. Then,&nbsp;<a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/baton-rouge-la\/\">Baton Rouge, LA<\/a>,&nbsp;comes&nbsp;in third with new&nbsp;units&nbsp;averaging 1,042 square feet. Apartment sizes here increased by&nbsp;11 square feet.&nbsp;<\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">In fourth place is <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/knoxville-tn\/\">Knoxville,&nbsp;TN<\/a>,&nbsp;where apartments average 1,032 square feet despite&nbsp;shrinking by&nbsp;44 square feet&nbsp;since 2016.&nbsp;However, two- and three-bedrooms&nbsp;still make up most of&nbsp;what&#8217;s&nbsp;available, keeping overall sizes on the larger side despite the decrease in square footage.&nbsp;&nbsp;<\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">Finally,&nbsp;<a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/fort-myers-fl\/\">Fort Myers, FL<\/a>,&nbsp;takes the fifth spot, also averaging 1,032 square feet.&nbsp;Here,&nbsp;the typical&nbsp;apartment size&nbsp;decreased&nbsp;by 13 square feet,&nbsp;which is&nbsp;about the size of a linen closet.&nbsp;<\/span><\/p>\n\n\n\n<p>Just like in Knoxville, two- and three-bedroom apartments in Fort Myers still outnumber smaller units, which keeps the overall average size high, even though these larger units have themselves become smaller compared to the previous decade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-where-are-the-smallest-apartments-western-and-northeastern-cities-lead-nbsp\"><span data-contrast=\"auto\">Where are the smallest apartments? Western and Northeastern cities lead&nbsp;<\/span><\/h2>\n\n\n\n<p><span data-contrast=\"auto\">Although apartment sizes have increased&nbsp;across the country&nbsp;since 2016, not all&nbsp;cities&nbsp;have&nbsp;benefited&nbsp;from larger&nbsp;floor plans.&nbsp;Namely,&nbsp;Seattle now has the smallest new apartments&nbsp;in the nation, averaging&nbsp;645 square feet&nbsp;after losing&nbsp;47 square feet.&nbsp;This&nbsp;reflects the trend of&nbsp;more studios and one-bedrooms&nbsp;being&nbsp;built in recent years.&nbsp;&nbsp;<\/span><\/p>\n\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Muli:ital,wght@0,400;0,600;0,700;1,400&display=swap');\n\n#rc-top-smallest-apartments {\n      --green: #b7d566;\n      --purple-dark: #6f21a3;\n      --red: #EC1E51;\n      --text: #424141;\n      --muted: #6b7280;\n      --border: #e5e7eb;\n      --row: #f8fafc;\n      --track: #e9e9e9;\n    \n}\n\n#rc-top-smallest-apartments {\n      margin: 0;\n      background: #ffffff;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      color: var(--text);\n    \n}\n\n#rc-top-smallest-apartments .visual-wrap {\n      max-width: 980px;\n      margin: 16px auto;\n      padding: 0 14px;\n      box-sizing: border-box;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n    \n}\n\n#rc-top-smallest-apartments .export-actions {\n      display: flex;\n      gap: 16px;\n      margin-top: 12px;\n\n}\n\n#rc-top-smallest-apartments .export-btn {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--muted);\n      text-decoration: underline;\n      cursor: pointer;\n\n}\n\n#rc-top-smallest-apartments .export-btn:hover {\n      color: var(--text);\n\n}\n\n#rc-top-smallest-apartments .visual-card {\n      background: #ffffff;\n      padding: 12px 14px 10px;\n      border-radius: 10px;\n      border: 1px solid var(--border);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n      box-sizing: border-box;\n    \n}\n\n#rc-top-smallest-apartments .visual-title {\n      margin: 0 0 24px;\n      text-align: center;\n      font-size: 24px;\n      font-weight: 700;\n      color: #555555;\n      line-height: 1.2;\n    \n}\n\n#rc-top-smallest-apartments .table-wrap {\n      width: 100%;\n      overflow-x: auto;\n    \n}\n\n#rc-top-smallest-apartments .visual-table {\n      width: 100%;\n      min-width: 850px;\n      border-collapse: collapse;\n      table-layout: fixed;\n    \n}\n\n#rc-top-smallest-apartments .visual-table th,\n#rc-top-smallest-apartments .visual-table td {\n      padding: 6px 8px;\n      text-align: center;\n      font-size: 13px;\n      line-height: 1.15;\n      color: #222222;\n      font-weight: 400;\n      border-bottom: 1px solid #e4e4e4;\n    \n}\n\n#rc-top-smallest-apartments .visual-table thead th {\n      font-size: 14px;\n      font-weight: 700;\n      color: #222222;\n      border-bottom: 2px solid #333333;\n      padding-bottom: 9px;\n      vertical-align: bottom;\n    \n}\n\n#rc-top-smallest-apartments .visual-table tbody tr:nth-child(even) {\n      background: var(--row);\n    \n}\n\n#rc-top-smallest-apartments .visual-table th:nth-child(1),\n#rc-top-smallest-apartments .visual-table td:nth-child(1) {\n      width: 58px;\n    \n}\n\n#rc-top-smallest-apartments .visual-table th:nth-child(2),\n#rc-top-smallest-apartments .visual-table td:nth-child(2) {\n      width: 200px;\n      text-align: left;\n    \n}\n\n#rc-top-smallest-apartments .visual-table th:nth-child(3),\n#rc-top-smallest-apartments .visual-table td:nth-child(3) {\n      width: 190px;\n    \n}\n\n#rc-top-smallest-apartments .visual-table th:nth-child(4),\n#rc-top-smallest-apartments .visual-table td:nth-child(4) {\n      width: 250px;\n    \n}\n\n#rc-top-smallest-apartments .visual-table th:nth-child(5),\n#rc-top-smallest-apartments .visual-table td:nth-child(5) {\n      width: 112px;\n      padding-left: 4px;\n      padding-right: 4px;\n    \n}\n\n#rc-top-smallest-apartments .visual-table th:nth-child(5) .header-wrap {\n      display: inline-block;\n      max-width: 96px;\n      line-height: 1.08;\n      white-space: normal;\n    \n}\n\n#rc-top-smallest-apartments .net-change-cell {\n      padding-left: 12px;\n      padding-right: 12px;\n    \n}\n\n#rc-top-smallest-apartments .net-change-track {\n      position: relative;\n      width: 210px;\n      height: 19px;\n      margin: 0 auto;\n      background: var(--track);\n      overflow: visible;\n    \n}\n\n#rc-top-smallest-apartments .zero-line {\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: var(--zero-position);\n      width: 1px;\n      background: #777777;\n      opacity: 0.45;\n      z-index: 3;\n    \n}\n\n#rc-top-smallest-apartments .bar-fill {\n      position: absolute;\n      top: 0;\n      left: var(--bar-start);\n      width: var(--bar-width);\n      height: 100%;\n      z-index: 2;\n    \n}\n\n#rc-top-smallest-apartments .bar-fill.positive {\n      background: var(--green);\n      border-radius: 0 2px 2px 0;\n    \n}\n\n#rc-top-smallest-apartments .bar-fill.negative {\n      background: var(--red);\n      border-radius: 2px 0 0 2px;\n    \n}\n\n#rc-top-smallest-apartments .bar-fill.zero {\n      display: none;\n    \n}\n\n#rc-top-smallest-apartments .net-label {\n      position: absolute;\n      top: 50%;\n      transform: translateY(-50%);\n      z-index: 4;\n      font-size: 12px;\n      line-height: 1;\n      font-weight: 700;\n      white-space: nowrap;\n    \n}\n\n#rc-top-smallest-apartments .net-label.positive.inside {\n      left: calc(var(--bar-start) + var(--bar-width) - 6px);\n      transform: translate(-100%, -50%);\n      color: #ffffff;\n    \n}\n\n#rc-top-smallest-apartments .net-label.positive.outside {\n      left: calc(var(--bar-start) + var(--bar-width) + 6px);\n      color: #333333;\n    \n}\n\n#rc-top-smallest-apartments .net-label.negative.inside {\n      left: calc(var(--bar-start) + 6px);\n      color: #ffffff;\n    \n}\n\n#rc-top-smallest-apartments .net-label.negative.outside {\n      left: calc(var(--bar-start) - 6px);\n      transform: translate(-100%, -50%);\n      \n    \n}\n\n#rc-top-smallest-apartments .net-label.zero {\n      left: calc(var(--zero-position) + 6px);\n      color: #333333;\n    \n}\n\n\n#rc-top-smallest-apartments .notes {\n      margin-top: 16px;\n      font-size: 11px;\n      line-height: 1.35;\n      color: #666666;\n      font-style: italic;\n    \n}\n\n#rc-top-smallest-apartments .notes p {\n      margin: 0;\n    \n}\n\n#rc-top-smallest-apartments .bottom-bar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 12px;\n      margin-top: 10px;\n      padding-top: 8px;\n      border-top: 1px solid var(--border);\n      flex-wrap: wrap;\n    \n}\n\n#rc-top-smallest-apartments .source {\n      font-size: 11px;\n      color: var(--muted);\n      line-height: 1.35;\n      margin: 0;\n      flex: 1;\n    \n}\n\n#rc-top-smallest-apartments .footer-right {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      flex: 0 0 auto;\n    \n}\n\n#rc-top-smallest-apartments .brand-logo {\n      height: 22px;\n      width: auto;\n      display: block;\n    \n}\n\n@media (max-width: 700px) {\n#rc-top-smallest-apartments .visual-wrap {\n        margin: 10px auto;\n        padding: 0 10px;\n      \n}\n\n#rc-top-smallest-apartments .visual-card {\n        padding: 12px 10px 10px;\n      \n}\n\n#rc-top-smallest-apartments .visual-title {\n        font-size: 18px;\n        margin-bottom: 18px;\n      \n}\n\n#rc-top-smallest-apartments .table-wrap {\n        overflow-x: visible;\n\n}\n\n#rc-top-smallest-apartments .visual-table {\n        display: block;\n        width: 100%;\n        min-width: 0;\n\n}\n\n#rc-top-smallest-apartments .visual-table thead {\n        display: none;\n\n}\n\n#rc-top-smallest-apartments .visual-table tbody {\n        display: block;\n\n}\n\n#rc-top-smallest-apartments .visual-table tbody tr {\n        display: grid;\n        grid-template-columns: auto 1fr auto;\n        column-gap: 10px;\n        row-gap: 3px;\n        align-items: baseline;\n        padding: 10px 10px 12px 12px;\n        border-bottom: 1px solid var(--border);\n        border-left: 3px solid var(--border);\n        background: #ffffff !important;\n\n}\n\n#rc-top-smallest-apartments .visual-table tbody tr:last-child {\n        border-bottom: none;\n\n}\n\n#rc-top-smallest-apartments .visual-table tbody tr.row-positive {\n        border-left-color: var(--green);\n\n}\n\n#rc-top-smallest-apartments .visual-table tbody tr.row-negative {\n        border-left-color: var(--red);\n\n}\n\n#rc-top-smallest-apartments .visual-table td {\n        border-bottom: none;\n        padding: 0;\n        font-size: 13px;\n        white-space: normal;\n\n}\n\n#rc-top-smallest-apartments .visual-table td:nth-child(1) {\n        grid-column: 1;\n        grid-row: 1;\n        align-self: center;\n        font-weight: 800;\n        font-size: 15px;\n        color: var(--muted);\n\n}\n\n#rc-top-smallest-apartments .visual-table td:nth-child(1)::before {\n        content: \"#\";\n\n}\n\n#rc-top-smallest-apartments .visual-table td:nth-child(2) {\n        grid-column: 2;\n        grid-row: 1;\n        text-align: left;\n        font-weight: 700;\n        font-size: 14.5px;\n        color: #1a1a1a;\n\n}\n\n#rc-top-smallest-apartments .visual-table td:nth-child(5) {\n        grid-column: 3;\n        grid-row: 1;\n        align-self: center;\n        text-align: right;\n        font-weight: 700;\n        font-size: 12.5px;\n        color: #333333;\n\n}\n\n#rc-top-smallest-apartments .visual-table td:nth-child(3) {\n        grid-column: 2 \/ 4;\n        grid-row: 2;\n        text-align: left;\n        font-size: 11.5px;\n        color: var(--muted);\n\n}\n\n#rc-top-smallest-apartments .visual-table td:nth-child(3)::before {\n        content: attr(data-label) \": \";\n\n}\n\n#rc-top-smallest-apartments .visual-table td.net-change-cell {\n        grid-column: 1 \/ 4;\n        grid-row: 3;\n        padding-top: 6px;\n\n}\n\n#rc-top-smallest-apartments .net-change-track {\n        width: 100%;\n\n}\n\n#rc-top-smallest-apartments .notes {\n        font-size: 10px;\n      \n}\n\n#rc-top-smallest-apartments .bottom-bar {\n        flex-direction: column;\n        align-items: flex-start;\n      \n}\n\n#rc-top-smallest-apartments .footer-right {\n        justify-content: flex-start;\n      \n}\n}\n<\/style>\n\n<div id=\"rc-top-smallest-apartments\" class=\"rc-gutenberg-visual\" data-rc-visual=\"rc-top-smallest-apartments\">\n<div class=\"visual-wrap\">\n<div class=\"visual-card\" data-rc-id=\"export-card\" id=\"rc-top-smallest-apartments-export-card\">\n<h1 class=\"visual-title\">Top 20 cities with the smallest new apartments<\/h1>\n<div class=\"table-wrap\">\n<table aria-label=\"Top 20 cities with the smallest new apartments\" class=\"visual-table\">\n<thead>\n<tr>\n<th scope=\"col\">Rank<\/th>\n<th scope=\"col\">City, state<\/th>\n<th scope=\"col\">Average size of new apartments<\/th>\n<th scope=\"col\">10-year net change<\/th>\n<th scope=\"col\"><span class=\"header-wrap\">10-year<br\/>percentage<br\/>change<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody data-rc-id=\"tableBody\" id=\"rc-top-smallest-apartments-tableBody\"><\/tbody>\n<\/table>\n<\/div>\n<div class=\"notes\">\n<p>Average size is in square feet.<\/p>\n<p>To ensure a statistically relevant sample size at city level, new apartments refer to completed units built between 2016 and 2025.<\/p>\n<p>The change is calculated by comparing the average size of new apartments with the average size of apartments completed between 2006 and 2015.<\/p>\n<\/div>\n<div class=\"bottom-bar\">\n<p class=\"source\">\n          Source: RentCafe analysis of Yardi data as of May 2026 \u2022 All data is accurate as of the date of publication.\n        <\/p>\n<div class=\"footer-right\">\n<a href=\"https:\/\/www.rentcafe.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">\n<img decoding=\"async\" alt=\"RentCafe logo\" class=\"brand-logo\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/11\/RentCafe-logo-for-light-background.png?resize=500,128\"\/>\n<\/a>\n<\/div>\n<\/div>\n<div class=\"export-actions\">\n<button class=\"export-btn\" data-rc-download=\"true\" data-rc-download-filename=\"top-20-cities-smallest-new-apartments.png\" data-rc-download-target=\"export-card\" type=\"button\">Download PNG<\/button>\n<button class=\"export-btn\" data-rc-get-data=\"true\" data-rc-get-data-filename=\"top-20-smallest-new-apartments-data.csv\" type=\"button\">Get data<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('rc-top-smallest-apartments');\n  if (!root || root.dataset.rcInitialized === 'true') return;\n  root.dataset.rcInitialized = 'true';\n\n  function getById(id) {\n    return root.querySelector('[data-rc-id=\"' + id + '\"]');\n  }\n\n  function loadHtml2Canvas() {\n    if (window.html2canvas) {\n      return Promise.resolve(window.html2canvas);\n    }\n\n    if (window.__rentcafeHtml2CanvasPromise) {\n      return window.__rentcafeHtml2CanvasPromise;\n    }\n\n    window.__rentcafeHtml2CanvasPromise = new Promise(function (resolve, reject) {\n      const existingScript = document.querySelector('script[data-rentcafe-html2canvas=\"true\"]');\n\n      if (existingScript) {\n        existingScript.addEventListener('load', function () {\n          if (window.html2canvas) resolve(window.html2canvas);\n          else reject(new Error('html2canvas loaded but is unavailable.'));\n        }, { once: true });\n        existingScript.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js';\n      script.async = true;\n      script.setAttribute('data-rentcafe-html2canvas', 'true');\n      script.onload = function () {\n        if (window.html2canvas) resolve(window.html2canvas);\n        else reject(new Error('html2canvas loaded but is unavailable.'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n\n    return window.__rentcafeHtml2CanvasPromise;\n  }\n\n  function html2canvas(element, options) {\n    return loadHtml2Canvas().then(function (html2canvasLibrary) {\n      return html2canvasLibrary(element, options);\n    });\n  }\n\n  function bindDownloadButton() {\n    const button = root.querySelector('[data-rc-download=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const target = button.getAttribute('data-rc-download-target') || 'export-card';\n      const filename = button.getAttribute('data-rc-download-filename');\n\n      if (filename) {\n        downloadPNG(target, filename);\n      } else {\n        downloadPNG(target);\n      }\n    });\n  }\n\n  function csvEscape(value) {\n    const str = String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n    if (\/[\",\\n]\/.test(str)) {\n      return '\"' + str.replace(\/\"\/g, '\"\"') + '\"';\n    }\n    return str;\n  }\n\n  function buildCsv() {\n    const header = ['Rank', 'City, state', 'Average size of new apartments (sq. ft.)', '10-year net change (sq. ft.)', '10-year percentage change'];\n    const lines = [header.map(csvEscape).join(',')];\n\n    rows.forEach(function (row) {\n      lines.push([row.rank, row.city, row.size, row.net, row.pct].map(csvEscape).join(','));\n    });\n\n    return lines.join('\\r\\n');\n  }\n\n  function bindGetDataButton() {\n    const button = root.querySelector('[data-rc-get-data=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const filename = button.getAttribute('data-rc-get-data-filename') || 'data.csv';\n      const csv = buildCsv();\n      const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = filename;\n      link.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  function bindOptionalControls() {\n    const citySearch = getById('citySearch');\n    if (citySearch && typeof handleSearch === 'function') {\n      citySearch.addEventListener('input', handleSearch);\n    }\n\n    const clearSearch = getById('clearSearch');\n    if (clearSearch && typeof clearCitySearch === 'function') {\n      clearSearch.addEventListener('click', clearCitySearch);\n    }\n\n    const prevPage = getById('prevPage');\n    if (prevPage && typeof changePage === 'function') {\n      prevPage.addEventListener('click', function () {\n        changePage(currentPage - 1);\n      });\n    }\n\n    const nextPage = getById('nextPage');\n    if (nextPage && typeof changePage === 'function') {\n      nextPage.addEventListener('click', function () {\n        changePage(currentPage + 1);\n      });\n    }\n\n    const pageButtons = getById('pageButtons');\n    if (pageButtons && typeof changePage === 'function') {\n      pageButtons.addEventListener('click', function (event) {\n        const button = event.target.closest('[data-rc-page]');\n        if (!button || !pageButtons.contains(button)) return;\n        changePage(Number(button.getAttribute('data-rc-page')));\n      });\n    }\n  }\n\n  const rows = [\n        { rank: 1, city: 'Seattle, WA', size: 645, net: -47, pct: '-7%' },\n        { rank: 2, city: 'Portland, OR', size: 665, net: -47, pct: '-7%' },\n        { rank: 3, city: 'Tacoma, WA', size: 684, net: -152, pct: '-18%' },\n        { rank: 4, city: 'Brooklyn, NY', size: 714, net: -6, pct: '-1%' },\n        { rank: 5, city: 'San Francisco, CA', size: 717, net: 35, pct: '5%' },\n        { rank: 6, city: 'Salt Lake City, UT', size: 728, net: -64, pct: '-8%' },\n        { rank: 7, city: 'Queens, NY', size: 732, net: 16, pct: '2%' },\n        { rank: 8, city: 'Manhattan, NY', size: 735, net: -1, pct: '0%' },\n        { rank: 9, city: 'Detroit, MI', size: 736, net: -153, pct: '-17%' },\n        { rank: 10, city: 'Oakland, CA', size: 739, net: -89, pct: '-11%' },\n        { rank: 11, city: 'Washington, DC', size: 747, net: -104, pct: '-12%' },\n        { rank: 12, city: 'Philadelphia, PA', size: 747, net: -90, pct: '-11%' },\n        { rank: 13, city: 'Boston, MA', size: 747, net: -45, pct: '-6%' },\n        { rank: 14, city: 'Minneapolis, MN', size: 754, net: -63, pct: '-8%' },\n        { rank: 15, city: 'St. Paul, MN', size: 762, net: -102, pct: '-12%' },\n        { rank: 16, city: 'Los Angeles, CA', size: 770, net: -50, pct: '-6%' },\n        { rank: 17, city: 'Chicago, IL', size: 774, net: -37, pct: '-5%' },\n        { rank: 18, city: 'Jersey City, NJ', size: 785, net: -79, pct: '-9%' },\n        { rank: 19, city: 'Baltimore, MD', size: 790, net: -54, pct: '-6%' },\n        { rank: 20, city: 'Pittsburgh, PA', size: 804, net: -142, pct: '-15%' }\n      ];\n\n      function formatNumber(value) {\n        return new Intl.NumberFormat('en-US').format(value);\n      }\n\n      function renderNetChangeBar(value, minValue, maxValue) {\n        const range = maxValue - minValue;\n        const zeroPosition = range ? ((0 - minValue) \/ range) * 100 : 0;\n        const barClass = value > 0 ? 'positive' : value < 0 ? 'negative' : 'zero';\n        const barStart = value < 0 ? zeroPosition + (value \/ range) * 100 : zeroPosition;\n        const barWidth = range ? Math.abs(value \/ range) * 100 : 0;\n        const labelPosition = barWidth >= 16 ? 'inside' : 'outside';\n        const labelClass = value === 0 ? 'zero' : `${barClass} ${labelPosition}`;\n\n        return `\n          <div class=\"net-change-track\" style=\"--zero-position: ${zeroPosition.toFixed(2)}%; --bar-start: ${barStart.toFixed(2)}%; --bar-width: ${barWidth.toFixed(2)}%;\">\n            <span class=\"zero-line\" aria-hidden=\"true\"><\/span>\n            <div class=\"bar-fill ${barClass}\" aria-hidden=\"true\"><\/div>\n            <span class=\"net-label ${labelClass}\">${formatNumber(value)}<\/span>\n          <\/div>\n        `;\n      }\n\n      function renderTable() {\n        const tableBody = getById('tableBody');\n        const minValue = Math.min(0, ...rows.map(row => row.net));\n        const maxValue = Math.max(0, ...rows.map(row => row.net));\n\n        tableBody.innerHTML = rows.map(row => {\n          const pctClass = row.pct.startsWith('-') ? 'negative-value' : '';\n          const rowDirClass = row.net > 0 ? 'row-positive' : row.net < 0 ? 'row-negative' : '';\n\n          return `\n            <tr class=\"${rowDirClass}\">\n              <td>${row.rank}<\/td>\n              <td>${row.city}<\/td>\n              <td data-label=\"Avg. size\">${formatNumber(row.size)}<\/td>\n              <td class=\"net-change-cell\" data-label=\"10-year net change\">${renderNetChangeBar(row.net, minValue, maxValue)}<\/td>\n              <td class=\"${pctClass}\">${row.pct}<\/td>\n            <\/tr>\n          `;\n        }).join('');\n      }\n\n      function downloadPNG(elementId, filename) {\n        const el = getById(elementId);\n        if (!el) return;\n\n        const rcExportActions = el.querySelector('.export-actions');\n        const rcExportActionsDisplay = rcExportActions ? rcExportActions.style.display : '';\n        if (rcExportActions) { rcExportActions.style.display = 'none'; }\n        html2canvas(el, {\n          scale: 2,\n          useCORS: true,\n          backgroundColor: '#ffffff'\n        }).then(function (canvas) {\n          if (rcExportActions) { rcExportActions.style.display = rcExportActionsDisplay; }\n          const link = document.createElement('a');\n          link.href = canvas.toDataURL('image\/png');\n          link.download = filename;\n          link.click();\n        });\n      }\n\n  function initVisual() {\n    bindDownloadButton();\n    bindGetDataButton();\n    bindOptionalControls();\n    if (typeof renderTable === 'function') renderTable();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVisual, { once: true });\n  } else {\n    initVisual();\n  }\n})();\n<\/script>\n\n\n\n\n<p>Nearby <span data-contrast=\"auto\">Portland, OR,&nbsp;follows closely, with the typical apartment size&nbsp;shrinking by&nbsp;47 square feet&nbsp;and averaging&nbsp;665 square feet.&nbsp;<\/span><\/p>\n\n\n\r\n\t\t<div id=\"cmw-quote-card-block_7d2906fb79623ae89d5599286b079f33\" class=\"cmw-quote-card\">\r\n\t\t\t\t\t\t\t<div class=\"cmw-quote-card__image\">\r\n\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/03\/Veronica-Grecu-RentCafe.jpg?w=150&amp;h=150&amp;crop=1\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Veronica Grecu, Senior Writer &amp; Research Analyst at RentCafe.com\" srcset=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/03\/Veronica-Grecu-RentCafe.jpg 800w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/03\/Veronica-Grecu-RentCafe.jpg?resize=150,150 150w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/03\/Veronica-Grecu-RentCafe.jpg?resize=500,500 500w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/03\/Veronica-Grecu-RentCafe.jpg?resize=768,768 768w, https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/03\/Veronica-Grecu-RentCafe.jpg?resize=96,96 96w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/>\t\t\t\t<\/div>\r\n\t\t\t\r\n\t\t\t<div class=\"cmw-quote-card__content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"cmw-quote-card__quote\">\r\n\t\t\t\t\t\t<p>When we see average apartment sizes decrease in a city, it doesn&#8217;t necessarily mean renters are getting less value. In high-demand markets, developers often prioritize studios and one-bedrooms because they can deliver more apartments per building and meet the needs of a growing number of single-person and smaller households. The trade-off is a lower average square footage, but the upside is more availability in markets where inventory has historically been tight.<\/p>\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<div class=\"cmw-quote-card__author\"><strong>Veronica Grecu<\/strong>, <span>Senior Real Estate Writer and Research Analyst at RentCafe.com<\/span><\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\r\n\t\t\n\n\n<p>Similarly, <span data-contrast=\"auto\"><a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/tacoma-wa\/\">Tacoma, WA<\/a>, experienced one of the largest reductions in living space among these markets. Apartments here lost 152 square feet compared to 10 years ago \u2014 the equivalent of a small bedroom. <\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">In Tacoma, not only has new construction favored smaller layouts over three-bedroom floor plans, but every apartment type has also decreased in size \u2014 a combination that drove the steep decline. The shift may reflect demand spreading from Seattle into nearby Tacoma, with new construction designed to meet that influx of renters.&nbsp;<\/span><\/p>\n\n\n\n<p>On the opposite coast, <span data-contrast=\"auto\"><a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/brooklyn-ny\/\">Brooklyn, NY<\/a> ranks fourth among the cities with the smallest apartments, averaging&nbsp;714 square feet, which is&nbsp;six&nbsp;square feet less than 10 years ago.&nbsp;<\/span><\/p>\n\n\n\n<p>Back on the West Coast, <span data-contrast=\"auto\"><a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/san-francisco-ca\/\">San Francisco<\/a>&nbsp;completes&nbsp;the top five with apartments averaging&nbsp;717 square feet. Unlike the other cities in this group,&nbsp;San Francisco recorded&nbsp;a&nbsp;35-square-foot&nbsp;increase&nbsp;in the last decade.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-which-cities-gained-the-most-living-space-nbsp\"><span data-contrast=\"auto\">Which cities gained the most living space?&nbsp;<\/span><\/h2>\n\n\n\n<p><span data-contrast=\"auto\">For renters prioritizing square footage,&nbsp;Frisco, TX,&nbsp;and St. Petersburg, FL, are worth a closer look.&nbsp;The cities&nbsp;lead the nation in apartment&nbsp;size&nbsp;growth, with&nbsp;the&nbsp;average&nbsp;unit&nbsp;gaining&nbsp;55 square feet&nbsp;in the last decade.&nbsp;&nbsp;<\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">That&#8217;s&nbsp;roughly enough&nbsp;room for a compact, in-unit laundry setup with a side-by-side washer and dryer.&nbsp;For Frisco, several factors are driving this growth: Two-bedrooms&nbsp;now make up a larger share of available&nbsp;apartments&nbsp;and&nbsp;three-bedroom floor plans have expanded in size, while the share&nbsp;of one-bedrooms has decreased.&nbsp;&nbsp;&nbsp;<\/span><\/p>\n\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Muli:ital,wght@0,400;0,600;0,700;1,400&display=swap');\n\n#rc-gained-square-footage {\n      --green: #b7d566;\n      --purple-dark: #6f21a3;\n      --red: #EC1E51;\n      --text: #424141;\n      --muted: #6b7280;\n      --border: #e5e7eb;\n      --row: #f8fafc;\n      --track: #e9e9e9;\n    \n}\n\n#rc-gained-square-footage {\n      margin: 0;\n      background: #ffffff;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      color: var(--text);\n    \n}\n\n#rc-gained-square-footage .visual-wrap {\n      max-width: 820px;\n      margin: 16px auto;\n      padding: 0 14px;\n      box-sizing: border-box;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n    \n}\n\n#rc-gained-square-footage .export-actions {\n      display: flex;\n      gap: 16px;\n      margin-top: 12px;\n\n}\n\n#rc-gained-square-footage .export-btn {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--muted);\n      text-decoration: underline;\n      cursor: pointer;\n\n}\n\n#rc-gained-square-footage .export-btn:hover {\n      color: var(--text);\n\n}\n\n#rc-gained-square-footage .visual-card {\n      background: #ffffff;\n      padding: 12px 14px 10px;\n      border-radius: 10px;\n      border: 1px solid var(--border);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n      box-sizing: border-box;\n    \n}\n\n#rc-gained-square-footage .visual-title {\n      margin: 0 0 24px;\n      text-align: center;\n      font-size: 24px;\n      font-weight: 700;\n      color: #555555;\n      line-height: 1.2;\n    \n}\n\n#rc-gained-square-footage .table-wrap {\n      width: 100%;\n      overflow-x: auto;\n    \n}\n\n#rc-gained-square-footage .visual-table {\n      width: 100%;\n      min-width: 700px;\n      border-collapse: collapse;\n      table-layout: fixed;\n    \n}\n\n#rc-gained-square-footage .visual-table th,\n#rc-gained-square-footage .visual-table td {\n      padding: 6px 8px;\n      text-align: center;\n      font-size: 13px;\n      line-height: 1.15;\n      color: #222222;\n      font-weight: 400;\n      border-bottom: 1px solid #e4e4e4;\n    \n}\n\n#rc-gained-square-footage .visual-table thead th {\n      font-size: 14px;\n      font-weight: 700;\n      color: #222222;\n      border-bottom: 2px solid #333333;\n      padding-bottom: 9px;\n      vertical-align: bottom;\n    \n}\n\n#rc-gained-square-footage .visual-table tbody tr:nth-child(even) {\n      background: var(--row);\n    \n}\n\n#rc-gained-square-footage .visual-table th:nth-child(1),\n#rc-gained-square-footage .visual-table td:nth-child(1) {\n      width: 58px;\n    \n}\n\n#rc-gained-square-footage .visual-table th:nth-child(2),\n#rc-gained-square-footage .visual-table td:nth-child(2) {\n      width: 220px;\n      text-align: left;\n    \n}\n\n#rc-gained-square-footage .visual-table th:nth-child(3),\n#rc-gained-square-footage .visual-table td:nth-child(3) {\n      width: 360px;\n    \n}\n\n#rc-gained-square-footage .visual-table th:nth-child(3) .header-wrap {\n      display: inline-block;\n      max-width: 190px;\n      line-height: 1.08;\n      white-space: normal;\n    \n}\n\n#rc-gained-square-footage .difference-cell {\n      padding-left: 12px;\n      padding-right: 12px;\n    \n}\n\n#rc-gained-square-footage .difference-track {\n      position: relative;\n      width: 290px;\n      height: 19px;\n      margin: 0 auto;\n      background: var(--track);\n      overflow: visible;\n    \n}\n\n#rc-gained-square-footage .bar-fill {\n      position: absolute;\n      top: 0;\n      left: 0;\n      height: 100%;\n      background: var(--bar-color, var(--green));\n      border-radius: 0 2px 2px 0;\n      z-index: 2;\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      box-sizing: border-box;\n      padding-right: 6px;\n      overflow: hidden;\n    \n}\n\n#rc-gained-square-footage .difference-label {\n      color: #ffffff;\n      font-size: 12px;\n      line-height: 1;\n      font-weight: 700;\n      white-space: nowrap;\n    \n}\n\n#rc-gained-square-footage .difference-label.inside {\n      left: calc(var(--bar-width) - 6px);\n      transform: translate(-100%, -50%);\n      color: #ffffff;\n    \n}\n\n#rc-gained-square-footage .difference-label.outside {\n      left: calc(var(--bar-width) + 6px);\n      color: #333333;\n    \n}\n\n#rc-gained-square-footage .notes {\n      margin-top: 16px;\n      font-size: 11px;\n      line-height: 1.35;\n      color: #666666;\n      font-style: italic;\n    \n}\n\n#rc-gained-square-footage .notes p {\n      margin: 0;\n    \n}\n\n#rc-gained-square-footage .bottom-bar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 12px;\n      margin-top: 10px;\n      padding-top: 8px;\n      border-top: 1px solid var(--border);\n      flex-wrap: wrap;\n    \n}\n\n#rc-gained-square-footage .source {\n      font-size: 11px;\n      color: var(--muted);\n      line-height: 1.35;\n      margin: 0;\n      flex: 1;\n    \n}\n\n#rc-gained-square-footage .footer-right {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      flex: 0 0 auto;\n    \n}\n\n#rc-gained-square-footage .brand-logo {\n      height: 22px;\n      width: auto;\n      display: block;\n    \n}\n\n@media (max-width: 700px) {\n#rc-gained-square-footage .visual-wrap {\n        margin: 10px auto;\n        padding: 0 10px;\n      \n}\n\n#rc-gained-square-footage .visual-card {\n        padding: 12px 10px 10px;\n      \n}\n\n#rc-gained-square-footage .visual-title {\n        font-size: 18px;\n        margin-bottom: 18px;\n      \n}\n\n#rc-gained-square-footage .table-wrap {\n        overflow-x: visible;\n\n}\n\n#rc-gained-square-footage .visual-table {\n        display: block;\n        width: 100%;\n        min-width: 0;\n\n}\n\n#rc-gained-square-footage .visual-table thead {\n        display: none;\n\n}\n\n#rc-gained-square-footage .visual-table tbody {\n        display: block;\n\n}\n\n#rc-gained-square-footage .visual-table tbody tr {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        column-gap: 8px;\n        row-gap: 4px;\n        border: 1px solid var(--border);\n        border-radius: 10px;\n        padding: 9px 11px;\n        margin-bottom: 8px;\n        background: #ffffff !important;\n\n}\n\n#rc-gained-square-footage .visual-table td {\n        border-bottom: none;\n        padding: 0;\n        font-size: 13px;\n        white-space: normal;\n\n}\n\n#rc-gained-square-footage .visual-table td:nth-child(1) {\n        order: 1;\n        flex: 0 0 auto;\n        font-weight: 700;\n        color: var(--muted);\n        font-size: 12px;\n\n}\n\n#rc-gained-square-footage .visual-table td:nth-child(1)::before {\n        content: \"#\";\n\n}\n\n#rc-gained-square-footage .visual-table td:nth-child(2) {\n        order: 2;\n        flex: 1 1 auto;\n        text-align: left;\n        font-weight: 700;\n        font-size: 14px;\n        color: #222222;\n\n}\n\n#rc-gained-square-footage .visual-table td.difference-cell {\n        order: 3;\n        flex: 0 0 100%;\n        padding: 2px 0 0;\n\n}\n\n#rc-gained-square-footage .difference-track {\n        width: 100%;\n\n}\n\n#rc-gained-square-footage .notes {\n        font-size: 10px;\n      \n}\n\n#rc-gained-square-footage .bottom-bar {\n        flex-direction: column;\n        align-items: flex-start;\n      \n}\n\n#rc-gained-square-footage .footer-right {\n        justify-content: flex-start;\n      \n}\n}\n<\/style>\n\n<div id=\"rc-gained-square-footage\" class=\"rc-gutenberg-visual\" data-rc-visual=\"rc-gained-square-footage\">\n<div class=\"visual-wrap\">\n<div class=\"visual-card\" data-rc-id=\"export-card\" id=\"rc-gained-square-footage-export-card\">\n<h1 class=\"visual-title\">Where apartments are getting larger<\/h1>\n<div class=\"table-wrap\">\n<table aria-label=\"Where apartments gained the most square footage in the past 10 years\" class=\"visual-table\">\n<thead>\n<tr>\n<th scope=\"col\">Rank<\/th>\n<th scope=\"col\">City, state<\/th>\n<th scope=\"col\"><span class=\"header-wrap\">Most significant changes in apartment size<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody data-rc-id=\"tableBody\" id=\"rc-gained-square-footage-tableBody\"><\/tbody>\n<\/table>\n<\/div>\n<div class=\"notes\">\n<p>Change is in square feet.<\/p>\n<\/div>\n<div class=\"bottom-bar\">\n<p class=\"source\">\n          Source: RentCafe analysis of Yardi data as of May 2026 \u2022 All data is accurate as of the date of publication.\n        <\/p>\n<div class=\"footer-right\">\n<a href=\"https:\/\/www.rentcafe.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">\n<img decoding=\"async\" alt=\"RentCafe logo\" class=\"brand-logo\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/11\/RentCafe-logo-for-light-background.png?resize=500,128\"\/>\n<\/a>\n<\/div>\n<\/div>\n<div class=\"export-actions\">\n<button class=\"export-btn\" data-rc-download=\"true\" data-rc-download-filename=\"apartment-size-changed-most-past-10-years.png\" data-rc-download-target=\"export-card\" type=\"button\">Download PNG<\/button>\n<button class=\"export-btn\" data-rc-get-data=\"true\" data-rc-get-data-filename=\"where-apartments-gained-most-square-footage-data.csv\" type=\"button\">Get data<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('rc-gained-square-footage');\n  if (!root || root.dataset.rcInitialized === 'true') return;\n  root.dataset.rcInitialized = 'true';\n\n  function getById(id) {\n    return root.querySelector('[data-rc-id=\"' + id + '\"]');\n  }\n\n  function loadHtml2Canvas() {\n    if (window.html2canvas) {\n      return Promise.resolve(window.html2canvas);\n    }\n\n    if (window.__rentcafeHtml2CanvasPromise) {\n      return window.__rentcafeHtml2CanvasPromise;\n    }\n\n    window.__rentcafeHtml2CanvasPromise = new Promise(function (resolve, reject) {\n      const existingScript = document.querySelector('script[data-rentcafe-html2canvas=\"true\"]');\n\n      if (existingScript) {\n        existingScript.addEventListener('load', function () {\n          if (window.html2canvas) resolve(window.html2canvas);\n          else reject(new Error('html2canvas loaded but is unavailable.'));\n        }, { once: true });\n        existingScript.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js';\n      script.async = true;\n      script.setAttribute('data-rentcafe-html2canvas', 'true');\n      script.onload = function () {\n        if (window.html2canvas) resolve(window.html2canvas);\n        else reject(new Error('html2canvas loaded but is unavailable.'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n\n    return window.__rentcafeHtml2CanvasPromise;\n  }\n\n  function html2canvas(element, options) {\n    return loadHtml2Canvas().then(function (html2canvasLibrary) {\n      return html2canvasLibrary(element, options);\n    });\n  }\n\n  function bindDownloadButton() {\n    const button = root.querySelector('[data-rc-download=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const target = button.getAttribute('data-rc-download-target') || 'export-card';\n      const filename = button.getAttribute('data-rc-download-filename');\n\n      if (filename) {\n        downloadPNG(target, filename);\n      } else {\n        downloadPNG(target);\n      }\n    });\n  }\n\n  function csvEscape(value) {\n    const str = String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n    if (\/[\",\\n]\/.test(str)) {\n      return '\"' + str.replace(\/\"\/g, '\"\"') + '\"';\n    }\n    return str;\n  }\n\n  function buildCsv() {\n    const header = ['Rank', 'City, state', 'Difference between 2016-2025 and 2006-2015 (sq. ft.)'];\n    const lines = [header.map(csvEscape).join(',')];\n\n    rows.forEach(function (row) {\n      lines.push([row.rank, row.city, row.difference].map(csvEscape).join(','));\n    });\n\n    return lines.join('\\r\\n');\n  }\n\n  function bindGetDataButton() {\n    const button = root.querySelector('[data-rc-get-data=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const filename = button.getAttribute('data-rc-get-data-filename') || 'data.csv';\n      const csv = buildCsv();\n      const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = filename;\n      link.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  function bindOptionalControls() {\n    const citySearch = getById('citySearch');\n    if (citySearch && typeof handleSearch === 'function') {\n      citySearch.addEventListener('input', handleSearch);\n    }\n\n    const clearSearch = getById('clearSearch');\n    if (clearSearch && typeof clearCitySearch === 'function') {\n      clearSearch.addEventListener('click', clearCitySearch);\n    }\n\n    const prevPage = getById('prevPage');\n    if (prevPage && typeof changePage === 'function') {\n      prevPage.addEventListener('click', function () {\n        changePage(currentPage - 1);\n      });\n    }\n\n    const nextPage = getById('nextPage');\n    if (nextPage && typeof changePage === 'function') {\n      nextPage.addEventListener('click', function () {\n        changePage(currentPage + 1);\n      });\n    }\n\n    const pageButtons = getById('pageButtons');\n    if (pageButtons && typeof changePage === 'function') {\n      pageButtons.addEventListener('click', function (event) {\n        const button = event.target.closest('[data-rc-page]');\n        if (!button || !pageButtons.contains(button)) return;\n        changePage(Number(button.getAttribute('data-rc-page')));\n      });\n    }\n  }\n\n  const rows = [\n        { rank: 1, city: 'Frisco, TX', difference: 55 },\n        { rank: 2, city: 'St. Petersburg, FL', difference: 55 },\n        { rank: 3, city: 'Irvine, CA', difference: 46 },\n        { rank: 4, city: 'San Francisco, CA', difference: 35 },\n        { rank: 5, city: 'Gainesville, FL', difference: 29 },\n        { rank: 6, city: 'Queens, NY', difference: 16 },\n        { rank: 7, city: 'Irving, TX', difference: 12 },\n        { rank: 8, city: 'Baton Rouge, LA', difference: 11 },\n        { rank: 9, city: 'Nashville, TN', difference: 10 },\n        { rank: 10, city: 'Wilmington, NC', difference: 8 }\n      ];\n\n      function formatNumber(value) {\n        return new Intl.NumberFormat('en-US').format(value);\n      }\n\nfunction renderDifferenceBar(value, maxValue) {\n  const barWidth = maxValue ? (Math.abs(value) \/ maxValue) * 100 : 0;\n  const directionClass = value < 0 ? 'negative' : 'positive';\n  const barColor = value < 0 ? 'var(--red)' : 'var(--green)';\n\n  return `\n    <div class=\"difference-track ${directionClass}\" style=\"--bar-width: ${barWidth.toFixed(2)}%; --bar-color: ${barColor};\">\n      <div class=\"bar-fill\" style=\"width: ${barWidth.toFixed(2)}%;\">\n        <span class=\"difference-label\">${formatNumber(value)}<\/span>\n      <\/div>\n    <\/div>\n  `;\n\n}\n\n      function renderTable() {\n        const tableBody = getById('tableBody');\n        const maxValue = Math.max(...rows.map(row => row.difference));\n\n        tableBody.innerHTML = rows.map(row => `\n          <tr>\n            <td>${row.rank}<\/td>\n            <td>${row.city}<\/td>\n            <td class=\"difference-cell\">${renderDifferenceBar(row.difference, maxValue)}<\/td>\n          <\/tr>\n        `).join('');\n      }\n\n      function downloadPNG(elementId, filename) {\n        const el = getById(elementId);\n        if (!el) return;\n\n        const rcExportActions = el.querySelector('.export-actions');\n        const rcExportActionsDisplay = rcExportActions ? rcExportActions.style.display : '';\n        if (rcExportActions) { rcExportActions.style.display = 'none'; }\n        html2canvas(el, {\n          scale: 2,\n          useCORS: true,\n          backgroundColor: '#ffffff'\n        }).then(function (canvas) {\n          if (rcExportActions) { rcExportActions.style.display = rcExportActionsDisplay; }\n          const link = document.createElement('a');\n          link.href = canvas.toDataURL('image\/png');\n          link.download = filename;\n          link.click();\n        });\n      }\n\n  function initVisual() {\n    bindDownloadButton();\n    bindGetDataButton();\n    bindOptionalControls();\n    if (typeof renderTable === 'function') renderTable();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVisual, { once: true });\n  } else {\n    initVisual();\n  }\n})();\n<\/script>\n\n\n\n\n<p><span data-contrast=\"auto\"><a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/irvine-ca\/\">Irvine, CA<\/a>,&nbsp;ranks second.&nbsp;In this California city, apartments gained an&nbsp;additional&nbsp;46 square feet&nbsp;compared to 10 years ago.&nbsp;<\/span><\/p>\n\n\n\n<p>Further north, <span data-contrast=\"auto\">San Francisco follows with an increase of&nbsp;35 square feet, making it one of the few major coastal markets to record&nbsp;significant&nbsp;growth in apartment size.&nbsp;A shift in San Francisco&#8217;s construction mix helps explain the&nbsp;increase:&nbsp;The share of studios has declined in recent years, replaced by a growing number of two-bedroom apartments.&nbsp;<\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">Gainesville, FL,&nbsp;is fourth, adding&nbsp;29 square feet&nbsp;to its new apartments&nbsp;during the same period.&nbsp;<\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">Another noteworthy market bucking the shrinking trend is <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/queens-ny\/\">Queens<\/a>.&nbsp;In this New York&nbsp;City&nbsp;borough, living space has increased by&nbsp;16 square feet&nbsp;compared to the&nbsp;previous&nbsp;decade as all&nbsp;apartment types have&nbsp;grown in size&nbsp;since 2016.&nbsp;&nbsp;<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span data-contrast=\"auto\">Where are apartments&nbsp;becoming more compact?&nbsp;<\/span><\/h2>\n\n\n\n<p><span data-contrast=\"auto\">Where you live makes a big difference, as apartment sizes are growing in some markets and shrinking in others. For example, apartments in <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/arlington-tx\/\">Arlington, TX<\/a>, recorded the largest decline among the nation\u2019s 100 largest cities as the average size here decreased by 287 square feet, which is roughly the size of a master bedroom.<\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">This is largely due to an increase in studios and one-bedroom apartments in recent years \u2014 both of which have also decreased in size \u2014 while two-bedroom options have become less common.&nbsp;<\/span><\/p>\n\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Muli:ital,wght@0,400;0,600;0,700;1,400&display=swap');\n\n#rc-lost-square-footage {\n      --green: #b7d566;\n      --purple-dark: #6f21a3;\n      --red: #EC1E51;\n      --text: #424141;\n      --muted: #6b7280;\n      --border: #e5e7eb;\n      --row: #f8fafc;\n      --track: #e9e9e9;\n    \n}\n\n#rc-lost-square-footage {\n      margin: 0;\n      background: #ffffff;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      color: var(--text);\n    \n}\n\n#rc-lost-square-footage .visual-wrap {\n      max-width: 820px;\n      margin: 16px auto;\n      padding: 0 14px;\n      box-sizing: border-box;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n    \n}\n\n#rc-lost-square-footage .export-actions {\n      display: flex;\n      gap: 16px;\n      margin-top: 12px;\n\n}\n\n#rc-lost-square-footage .export-btn {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--muted);\n      text-decoration: underline;\n      cursor: pointer;\n\n}\n\n#rc-lost-square-footage .export-btn:hover {\n      color: var(--text);\n\n}\n\n#rc-lost-square-footage .visual-card {\n      background: #ffffff;\n      padding: 12px 14px 10px;\n      border-radius: 10px;\n      border: 1px solid var(--border);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n      box-sizing: border-box;\n    \n}\n\n#rc-lost-square-footage .visual-title {\n      margin: 0 0 24px;\n      text-align: center;\n      font-size: 24px;\n      font-weight: 700;\n      color: #555555;\n      line-height: 1.2;\n    \n}\n\n#rc-lost-square-footage .table-wrap {\n      width: 100%;\n      overflow-x: auto;\n    \n}\n\n#rc-lost-square-footage .visual-table {\n      width: 100%;\n      min-width: 700px;\n      border-collapse: collapse;\n      table-layout: fixed;\n    \n}\n\n#rc-lost-square-footage .visual-table th,\n#rc-lost-square-footage .visual-table td {\n      padding: 6px 8px;\n      text-align: center;\n      font-size: 13px;\n      line-height: 1.15;\n      color: #222222;\n      font-weight: 400;\n      border-bottom: 1px solid #e4e4e4;\n    \n}\n\n#rc-lost-square-footage .visual-table thead th {\n      font-size: 14px;\n      font-weight: 700;\n      color: #222222;\n      border-bottom: 2px solid #333333;\n      padding-bottom: 9px;\n      vertical-align: bottom;\n    \n}\n\n#rc-lost-square-footage .visual-table tbody tr:nth-child(even) {\n      background: var(--row);\n    \n}\n\n#rc-lost-square-footage .visual-table th:nth-child(1),\n#rc-lost-square-footage .visual-table td:nth-child(1) {\n      width: 58px;\n    \n}\n\n#rc-lost-square-footage .visual-table th:nth-child(2),\n#rc-lost-square-footage .visual-table td:nth-child(2) {\n      width: 220px;\n      text-align: left;\n    \n}\n\n#rc-lost-square-footage .visual-table th:nth-child(3),\n#rc-lost-square-footage .visual-table td:nth-child(3) {\n      width: 360px;\n    \n}\n\n#rc-lost-square-footage .visual-table th:nth-child(3) .header-wrap {\n      display: inline-block;\n      max-width: 190px;\n      line-height: 1.08;\n      white-space: normal;\n    \n}\n\n#rc-lost-square-footage .difference-cell {\n      padding-left: 12px;\n      padding-right: 12px;\n    \n}\n\n#rc-lost-square-footage .difference-track {\n      position: relative;\n      width: 290px;\n      height: 19px;\n      margin: 0 auto;\n      background: var(--track);\n      overflow: visible;\n    \n}\n\n#rc-lost-square-footage .bar-fill {\n      position: absolute;\n      top: 0;\n      height: 100%;\n      background: var(--bar-color, var(--green));\n      z-index: 2;\n    \n}\n\n#rc-lost-square-footage .difference-track.positive .bar-fill {\n      left: 0;\n      border-radius: 0 2px 2px 0;\n    \n}\n\n#rc-lost-square-footage .difference-track.negative .bar-fill {\n      right: 0;\n      border-radius: 2px 0 0 2px;\n    \n}\n\n#rc-lost-square-footage .difference-label {\n      position: absolute;\n      top: 50%;\n      transform: translateY(-50%);\n      z-index: 4;\n      font-size: 12px;\n      line-height: 1;\n      font-weight: 700;\n      white-space: nowrap;\n    \n}\n\n#rc-lost-square-footage .difference-track.positive .difference-label.inside {\n      left: calc(var(--bar-width) - 6px);\n      transform: translate(-100%, -50%);\n      color: #ffffff;\n    \n}\n\n#rc-lost-square-footage .difference-track.positive .difference-label.outside {\n      left: calc(var(--bar-width) + 6px);\n      color: #333333;\n    \n}\n\n#rc-lost-square-footage .difference-track.negative .difference-label.inside {\n      right: calc(var(--bar-width) - 6px);\n      transform: translate(100%, -50%);\n      color: #ffffff;\n    \n}\n\n#rc-lost-square-footage .difference-track.negative .difference-label.outside {\n      right: calc(var(--bar-width) + 6px);\n      color: #333333;\n    \n}\n\n#rc-lost-square-footage .notes {\n      margin-top: 16px;\n      font-size: 11px;\n      line-height: 1.35;\n      color: #666666;\n      font-style: italic;\n    \n}\n\n#rc-lost-square-footage .notes p {\n      margin: 0;\n    \n}\n\n#rc-lost-square-footage .bottom-bar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 12px;\n      margin-top: 10px;\n      padding-top: 8px;\n      border-top: 1px solid var(--border);\n      flex-wrap: wrap;\n    \n}\n\n#rc-lost-square-footage .source {\n      font-size: 11px;\n      color: var(--muted);\n      line-height: 1.35;\n      margin: 0;\n      flex: 1;\n    \n}\n\n#rc-lost-square-footage .footer-right {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      flex: 0 0 auto;\n    \n}\n\n#rc-lost-square-footage .brand-logo {\n      height: 22px;\n      width: auto;\n      display: block;\n    \n}\n\n@media (max-width: 700px) {\n#rc-lost-square-footage .visual-wrap {\n        margin: 10px auto;\n        padding: 0 10px;\n      \n}\n\n#rc-lost-square-footage .visual-card {\n        padding: 12px 10px 10px;\n      \n}\n\n#rc-lost-square-footage .visual-title {\n        font-size: 18px;\n        margin-bottom: 18px;\n      \n}\n\n#rc-lost-square-footage .table-wrap {\n        overflow-x: visible;\n\n}\n\n#rc-lost-square-footage .visual-table {\n        display: block;\n        width: 100%;\n        min-width: 0;\n\n}\n\n#rc-lost-square-footage .visual-table thead {\n        display: none;\n\n}\n\n#rc-lost-square-footage .visual-table tbody {\n        display: block;\n\n}\n\n#rc-lost-square-footage .visual-table tbody tr {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        column-gap: 8px;\n        row-gap: 4px;\n        border: 1px solid var(--border);\n        border-radius: 10px;\n        padding: 9px 11px;\n        margin-bottom: 8px;\n        background: #ffffff !important;\n\n}\n\n#rc-lost-square-footage .visual-table td {\n        border-bottom: none;\n        padding: 0;\n        font-size: 13px;\n        white-space: normal;\n\n}\n\n#rc-lost-square-footage .visual-table td:nth-child(1) {\n        order: 1;\n        flex: 0 0 auto;\n        font-weight: 700;\n        color: var(--muted);\n        font-size: 12px;\n\n}\n\n#rc-lost-square-footage .visual-table td:nth-child(1)::before {\n        content: \"#\";\n\n}\n\n#rc-lost-square-footage .visual-table td:nth-child(2) {\n        order: 2;\n        flex: 1 1 auto;\n        text-align: left;\n        font-weight: 700;\n        font-size: 14px;\n        color: #222222;\n\n}\n\n#rc-lost-square-footage .visual-table td.difference-cell {\n        order: 3;\n        flex: 0 0 100%;\n        padding: 2px 0 0;\n\n}\n\n#rc-lost-square-footage .difference-track {\n        width: 100%;\n\n}\n\n#rc-lost-square-footage .notes {\n        font-size: 10px;\n      \n}\n\n#rc-lost-square-footage .bottom-bar {\n        flex-direction: column;\n        align-items: flex-start;\n      \n}\n\n#rc-lost-square-footage .footer-right {\n        justify-content: flex-start;\n      \n}\n}\n<\/style>\n\n<div id=\"rc-lost-square-footage\" class=\"rc-gutenberg-visual\" data-rc-visual=\"rc-lost-square-footage\">\n<div class=\"visual-wrap\">\n<div class=\"visual-card\" data-rc-id=\"export-card\" id=\"rc-lost-square-footage-export-card\">\n<h1 class=\"visual-title\">Where apartments are getting smaller<\/h1>\n<div class=\"table-wrap\">\n<table aria-label=\"Where apartments lost the most square footage in the past 10 years\" class=\"visual-table\">\n<thead>\n<tr>\n<th scope=\"col\">Rank<\/th>\n<th scope=\"col\">City, state<\/th>\n<th scope=\"col\"><span class=\"header-wrap\">Most significant changes in apartment size<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody data-rc-id=\"tableBody\" id=\"rc-lost-square-footage-tableBody\"><\/tbody>\n<\/table>\n<\/div>\n<div class=\"notes\">\n<p>Change is in square feet.<\/p>\n<\/div>\n<div class=\"bottom-bar\">\n<p class=\"source\">\n          Source: RentCafe analysis of Yardi data as of May 2026 \u2022 All data is accurate as of the date of publication.\n        <\/p>\n<div class=\"footer-right\">\n<a href=\"https:\/\/www.rentcafe.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">\n<img decoding=\"async\" alt=\"RentCafe logo\" class=\"brand-logo\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/11\/RentCafe-logo-for-light-background.png?resize=500,128\"\/>\n<\/a>\n<\/div>\n<\/div>\n<div class=\"export-actions\">\n<button class=\"export-btn\" data-rc-download=\"true\" data-rc-download-filename=\"apartment-size-changed-most-past-10-years-negative-values-right-to-left.png\" data-rc-download-target=\"export-card\" type=\"button\">Download PNG<\/button>\n<button class=\"export-btn\" data-rc-get-data=\"true\" data-rc-get-data-filename=\"where-apartments-lost-most-square-footage-data.csv\" type=\"button\">Get data<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('rc-lost-square-footage');\n  if (!root || root.dataset.rcInitialized === 'true') return;\n  root.dataset.rcInitialized = 'true';\n\n  function getById(id) {\n    return root.querySelector('[data-rc-id=\"' + id + '\"]');\n  }\n\n  function loadHtml2Canvas() {\n    if (window.html2canvas) {\n      return Promise.resolve(window.html2canvas);\n    }\n\n    if (window.__rentcafeHtml2CanvasPromise) {\n      return window.__rentcafeHtml2CanvasPromise;\n    }\n\n    window.__rentcafeHtml2CanvasPromise = new Promise(function (resolve, reject) {\n      const existingScript = document.querySelector('script[data-rentcafe-html2canvas=\"true\"]');\n\n      if (existingScript) {\n        existingScript.addEventListener('load', function () {\n          if (window.html2canvas) resolve(window.html2canvas);\n          else reject(new Error('html2canvas loaded but is unavailable.'));\n        }, { once: true });\n        existingScript.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js';\n      script.async = true;\n      script.setAttribute('data-rentcafe-html2canvas', 'true');\n      script.onload = function () {\n        if (window.html2canvas) resolve(window.html2canvas);\n        else reject(new Error('html2canvas loaded but is unavailable.'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n\n    return window.__rentcafeHtml2CanvasPromise;\n  }\n\n  function html2canvas(element, options) {\n    return loadHtml2Canvas().then(function (html2canvasLibrary) {\n      return html2canvasLibrary(element, options);\n    });\n  }\n\n  function bindDownloadButton() {\n    const button = root.querySelector('[data-rc-download=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const target = button.getAttribute('data-rc-download-target') || 'export-card';\n      const filename = button.getAttribute('data-rc-download-filename');\n\n      if (filename) {\n        downloadPNG(target, filename);\n      } else {\n        downloadPNG(target);\n      }\n    });\n  }\n\n  function csvEscape(value) {\n    const str = String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n    if (\/[\",\\n]\/.test(str)) {\n      return '\"' + str.replace(\/\"\/g, '\"\"') + '\"';\n    }\n    return str;\n  }\n\n  function buildCsv() {\n    const header = ['Rank', 'City, state', 'Difference between 2016-2025 and 2006-2015 (sq. ft.)'];\n    const lines = [header.map(csvEscape).join(',')];\n\n    rows.forEach(function (row) {\n      lines.push([row.rank, row.city, row.difference].map(csvEscape).join(','));\n    });\n\n    return lines.join('\\r\\n');\n  }\n\n  function bindGetDataButton() {\n    const button = root.querySelector('[data-rc-get-data=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const filename = button.getAttribute('data-rc-get-data-filename') || 'data.csv';\n      const csv = buildCsv();\n      const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = filename;\n      link.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  function bindOptionalControls() {\n    const citySearch = getById('citySearch');\n    if (citySearch && typeof handleSearch === 'function') {\n      citySearch.addEventListener('input', handleSearch);\n    }\n\n    const clearSearch = getById('clearSearch');\n    if (clearSearch && typeof clearCitySearch === 'function') {\n      clearSearch.addEventListener('click', clearCitySearch);\n    }\n\n    const prevPage = getById('prevPage');\n    if (prevPage && typeof changePage === 'function') {\n      prevPage.addEventListener('click', function () {\n        changePage(currentPage - 1);\n      });\n    }\n\n    const nextPage = getById('nextPage');\n    if (nextPage && typeof changePage === 'function') {\n      nextPage.addEventListener('click', function () {\n        changePage(currentPage + 1);\n      });\n    }\n\n    const pageButtons = getById('pageButtons');\n    if (pageButtons && typeof changePage === 'function') {\n      pageButtons.addEventListener('click', function (event) {\n        const button = event.target.closest('[data-rc-page]');\n        if (!button || !pageButtons.contains(button)) return;\n        changePage(Number(button.getAttribute('data-rc-page')));\n      });\n    }\n  }\n\n  const rows = [\n        { rank: 1, city: 'Arlington, TX', difference: -287 },\n        { rank: 2, city: 'Birmingham, AL', difference: -156 },\n        { rank: 3, city: 'Columbia, SC', difference: -154 },\n        { rank: 4, city: 'Detroit, MI', difference: -153 },\n        { rank: 5, city: 'Tacoma, WA', difference: -152 },\n        { rank: 6, city: 'Tempe, AZ', difference: -151 },\n        { rank: 7, city: 'Memphis, TN', difference: -146 },\n        { rank: 8, city: 'Tulsa, OK', difference: -144 },\n        { rank: 9, city: 'Pittsburgh, PA', difference: -142 },\n        { rank: 10, city: 'Glendale, AZ', difference: -141 }\n      ];\n\n      function formatNumber(value) {\n        return new Intl.NumberFormat('en-US').format(value);\n      }\n\n      function renderDifferenceBar(value, maxValue) {\n        const barWidth = maxValue ? (Math.abs(value) \/ maxValue) * 100 : 0;\n        const labelPosition = barWidth >= 18 ? 'inside' : 'outside';\n        const directionClass = value < 0 ? 'negative' : 'positive';\n        const barColor = value < 0 ? 'var(--red)' : 'var(--green)';\n\n        return `\n          <div class=\"difference-track ${directionClass}\" style=\"--bar-width: ${barWidth.toFixed(2)}%; --bar-color: ${barColor};\">\n            <div class=\"bar-fill\" style=\"width: ${barWidth.toFixed(2)}%;\" aria-hidden=\"true\"><\/div>\n            <span class=\"difference-label ${labelPosition}\">${formatNumber(value)}<\/span>\n          <\/div>\n        `;\n      }\n\n      function renderTable() {\n        const tableBody = getById('tableBody');\n        const maxValue = Math.max(...rows.map(row => Math.abs(row.difference)));\n\n        tableBody.innerHTML = rows.map(row => `\n          <tr>\n            <td>${row.rank}<\/td>\n            <td>${row.city}<\/td>\n            <td class=\"difference-cell\">${renderDifferenceBar(row.difference, maxValue)}<\/td>\n          <\/tr>\n        `).join('');\n      }\n\n      function downloadPNG(elementId, filename) {\n        const el = getById(elementId);\n        if (!el) return;\n\n        const rcExportActions = el.querySelector('.export-actions');\n        const rcExportActionsDisplay = rcExportActions ? rcExportActions.style.display : '';\n        if (rcExportActions) { rcExportActions.style.display = 'none'; }\n        html2canvas(el, {\n          scale: 2,\n          useCORS: true,\n          backgroundColor: '#ffffff'\n        }).then(function (canvas) {\n          if (rcExportActions) { rcExportActions.style.display = rcExportActionsDisplay; }\n          const link = document.createElement('a');\n          link.href = canvas.toDataURL('image\/png');\n          link.download = filename;\n          link.click();\n        });\n      }\n\n  function initVisual() {\n    bindDownloadButton();\n    bindGetDataButton();\n    bindOptionalControls();\n    if (typeof renderTable === 'function') renderTable();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVisual, { once: true });\n  } else {\n    initVisual();\n  }\n})();\n<\/script>\n\n\n\n\n<p>Along the same lines, <span data-contrast=\"auto\"><a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/birmingham-al\/\">Birmingham, AL<\/a>, and <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/columbia-sc\/\">Columbia, SC<\/a>, also experienced substantial decreases. In those cities, apartments are about 156 and 154 square feet smaller, respectively, compared to those built 10 years ago.&nbsp;<\/span><\/p>\n\n\n\n<p><span data-contrast=\"auto\">Finally, apartments in <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/detroit-mi\/\">Detroit<\/a> are now&nbsp;153 square feet&nbsp;more compact&nbsp;than they were&nbsp;in the&nbsp;previous&nbsp;decade, while Tacoma, WA,&nbsp;rounds out the list with a decline of&nbsp;152 square feet&nbsp;in the size of new apartments.&nbsp;<\/span><\/p>\n\n\n\n<p><strong>However, looking ahead, the pipeline of apartments currently under construction suggests that developers will continue to prioritize spacious floor plans, especially in the South.<\/strong> Among cities with the largest apartments under construction, <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/gallatin-tn\/\">Gallatin, TN<\/a>, leads with an average size of 1,336 square feet, while three Florida cities \u2014 <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/palmetto-ccd-fl\/\">Palmetto<\/a> (1,326 square feet), <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/ocala-fl\/\">Ocala<\/a> (1,202 square feet) and <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/vero-beach-fl\/\">Vero Beach<\/a> (1,163 square feet) \u2014 rank among the top five.<\/p>\n\n\n\n<p>Meanwhile, cities like <a href=\"https:\/\/www.rentcafe.com\/apartments-for-rent\/newark-nj\/\">Newark, NJ<\/a> (536 square feet), and Seattle (611 square feet) will most likely continue to favor more compact floor plans.<\/p>\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Muli:ital,wght@0,400;0,600;0,700;1,400&display=swap');\n\n#rc-average-size-100-cities {\n      --purple: #b7d566;\n      --purple-dark: #6f21a3;\n      --orange: #EC1E51;\n      --text: #424141;\n      --muted: #6b7280;\n      --border: #e5e7eb;\n      --row: #f8fafc;\n      --track: #e9e9e9;\n    \n}\n\n#rc-average-size-100-cities {\n      margin: 0;\n      background: #ffffff;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      color: var(--text);\n    \n}\n\n#rc-average-size-100-cities .visual-wrap {\n      max-width: 980px;\n      margin: 16px auto;\n      padding: 0 14px;\n      box-sizing: border-box;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n    \n}\n\n#rc-average-size-100-cities .export-actions {\n      display: flex;\n      gap: 16px;\n      margin-top: 12px;\n\n}\n\n#rc-average-size-100-cities .export-btn {\n      background: none;\n      border: none;\n      padding: 0;\n      margin: 0;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--muted);\n      text-decoration: underline;\n      cursor: pointer;\n\n}\n\n#rc-average-size-100-cities .export-btn:hover {\n      color: var(--text);\n\n}\n\n#rc-average-size-100-cities .visual-card {\n      background: #ffffff;\n      padding: 12px 14px 10px;\n      border-radius: 10px;\n      border: 1px solid var(--border);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n      box-sizing: border-box;\n    \n}\n\n#rc-average-size-100-cities .visual-title {\n      margin: 0 0 24px;\n      text-align: center;\n      font-size: 24px;\n      font-weight: 700;\n      color: #555555;\n      line-height: 1.2;\n    \n}\n\n#rc-average-size-100-cities .table-wrap {\n      width: 100%;\n      overflow-x: auto;\n    \n}\n\n#rc-average-size-100-cities .visual-table {\n      width: 100%;\n      min-width: 850px;\n      border-collapse: collapse;\n      table-layout: fixed;\n    \n}\n\n#rc-average-size-100-cities .visual-table th,\n#rc-average-size-100-cities .visual-table td {\n      padding: 6px 8px;\n      text-align: center;\n      font-size: 13px;\n      line-height: 1.15;\n      color: #222222;\n      font-weight: 400;\n      border-bottom: 1px solid #e4e4e4;\n    \n}\n\n#rc-average-size-100-cities .visual-table thead th {\n      font-size: 14px;\n      font-weight: 700;\n      color: #222222;\n      border-bottom: 2px solid #333333;\n      padding-bottom: 9px;\n      vertical-align: bottom;\n    \n}\n\n#rc-average-size-100-cities .visual-table tbody tr:nth-child(even) {\n      background: var(--row);\n    \n}\n\n#rc-average-size-100-cities .visual-table th:nth-child(1),\n#rc-average-size-100-cities .visual-table td:nth-child(1) {\n      width: 58px;\n    \n}\n\n#rc-average-size-100-cities .visual-table th:nth-child(2),\n#rc-average-size-100-cities .visual-table td:nth-child(2) {\n      width: 200px;\n      text-align: left;\n    \n}\n\n#rc-average-size-100-cities .visual-table th:nth-child(3),\n#rc-average-size-100-cities .visual-table td:nth-child(3) {\n      width: 190px;\n    \n}\n\n#rc-average-size-100-cities .visual-table th:nth-child(3) .header-wrap {\n      display: inline-block;\n      max-width: 150px;\n      line-height: 1.08;\n      white-space: normal;\n    \n}\n\n#rc-average-size-100-cities .visual-table th:nth-child(4),\n#rc-average-size-100-cities .visual-table td:nth-child(4) {\n      width: 250px;\n    \n}\n\n#rc-average-size-100-cities .visual-table th:nth-child(5),\n#rc-average-size-100-cities .visual-table td:nth-child(5) {\n      width: 112px;\n      padding-left: 4px;\n      padding-right: 4px;\n    \n}\n\n#rc-average-size-100-cities .visual-table th:nth-child(5) .header-wrap {\n      display: inline-block;\n      max-width: 96px;\n      line-height: 1.08;\n      white-space: normal;\n    \n}\n\n#rc-average-size-100-cities .net-change-cell {\n      padding-left: 12px;\n      padding-right: 12px;\n    \n}\n\n#rc-average-size-100-cities .net-change-track {\n      position: relative;\n      width: 210px;\n      height: 19px;\n      margin: 0 auto;\n      background: var(--track);\n      overflow: visible;\n    \n}\n\n#rc-average-size-100-cities .zero-line {\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: var(--zero-position);\n      width: 1px;\n      background: #777777;\n      opacity: 0.45;\n      z-index: 3;\n    \n}\n\n#rc-average-size-100-cities .bar-fill {\n      position: absolute;\n      top: 0;\n      left: var(--bar-start);\n      width: var(--bar-width);\n      height: 100%;\n      z-index: 2;\n    \n}\n\n#rc-average-size-100-cities .bar-fill.positive {\n      background: var(--purple);\n      border-radius: 0 2px 2px 0;\n    \n}\n\n#rc-average-size-100-cities .bar-fill.negative {\n      background: var(--orange);\n      border-radius: 2px 0 0 2px;\n    \n}\n\n#rc-average-size-100-cities .bar-fill.zero {\n      display: none;\n    \n}\n\n#rc-average-size-100-cities .net-label {\n      position: absolute;\n      top: 50%;\n      transform: translateY(-50%);\n      z-index: 4;\n      font-size: 12px;\n      line-height: 1;\n      font-weight: 700;\n      white-space: nowrap;\n    \n}\n\n#rc-average-size-100-cities .net-label.positive.inside {\n      left: calc(var(--bar-start) + var(--bar-width) - 6px);\n      transform: translate(-100%, -50%);\n      color: #ffffff;\n    \n}\n\n#rc-average-size-100-cities .net-label.positive.outside {\n      left: calc(var(--bar-start) + var(--bar-width) + 6px);\n      color: #333333;\n    \n}\n\n#rc-average-size-100-cities .net-label.negative.inside {\n      left: calc(var(--bar-start) + 6px);\n      color: #ffffff;\n    \n}\n\n#rc-average-size-100-cities .net-label.negative.outside {\n      left: calc(var(--bar-start) - 6px);\n      transform: translate(-100%, -50%);\n      color: #000000;\n\n}\n\n#rc-average-size-100-cities .net-label.zero {\n      left: calc(var(--zero-position) + 6px);\n      color: #333333;\n    \n}\n\n#rc-average-size-100-cities .negative-value {\n      \n      font-weight: 500 !important;\n    \n}\n\n#rc-average-size-100-cities .search-controls {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      gap: 6px;\n      margin: -12px 0 12px;\n      flex-wrap: wrap;\n    \n}\n\n#rc-average-size-100-cities .search-label {\n      font-size: 12px;\n      font-weight: 700;\n      color: #555555;\n    \n}\n\n#rc-average-size-100-cities .search-input {\n      width: min(220px, 100%);\n      border: 1px solid var(--border);\n      border-radius: 6px;\n      padding: 5px 8px;\n      font-size: 12px;\n      line-height: 1.15;\n      color: #222222;\n      background: #ffffff;\n      outline: none;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      box-sizing: border-box;\n    \n}\n\n#rc-average-size-100-cities .search-input:focus {\n      border-color: var(--muted);\n      box-shadow: 0 0 0 2px rgba(107, 114, 128, 0.15);\n\n}\n\n#rc-average-size-100-cities .clear-search {\n      background: #ffffff;\n      color: var(--muted);\n      padding: 4px 7px;\n      font-size: 11px;\n      border-radius: 6px;\n    \n}\n\n#rc-average-size-100-cities .search-count {\n      flex-basis: 100%;\n      text-align: center;\n      font-size: 12px;\n      line-height: 1.2;\n      color: var(--muted);\n    \n}\n\n#rc-average-size-100-cities .no-results {\n      padding: 18px 8px !important;\n      text-align: center !important;\n      color: var(--muted) !important;\n      font-weight: 700 !important;\n    \n}\n\n#rc-average-size-100-cities .pagination {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      gap: 8px;\n      margin: 14px 0 4px;\n      flex-wrap: wrap;\n      font-size: 12px;\n      color: var(--muted);\n    \n}\n\n#rc-average-size-100-cities .pagination-status {\n      font-weight: 700;\n      color: #555555;\n      margin-right: 4px;\n    \n}\n\n#rc-average-size-100-cities .page-btn {\n      background: #ffffff;\n      color: var(--muted);\n      border: 1px solid var(--muted);\n      border-radius: 7px;\n      padding: 5px 9px;\n      font-size: 12px;\n      font-weight: 700;\n      cursor: pointer;\n      font-family: 'Muli', Arial, Helvetica, sans-serif;\n      line-height: 1.1;\n    \n}\n\n#rc-average-size-100-cities .page-btn:hover:not(:disabled),\n#rc-average-size-100-cities .page-btn.active {\n      background: var(--muted);\n      color: #ffffff;\n\n}\n\n#rc-average-size-100-cities .page-btn:disabled {\n      opacity: 0.45;\n      cursor: not-allowed;\n    \n}\n\n#rc-average-size-100-cities .notes {\n      margin-top: 16px;\n      font-size: 11px;\n      line-height: 1.35;\n      color: #666666;\n      font-style: italic;\n    \n}\n\n#rc-average-size-100-cities .notes p {\n      margin: 0;\n    \n}\n\n#rc-average-size-100-cities .bottom-bar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 12px;\n      margin-top: 10px;\n      padding-top: 8px;\n      border-top: 1px solid var(--border);\n      flex-wrap: wrap;\n    \n}\n\n#rc-average-size-100-cities .source {\n      font-size: 11px;\n      color: var(--muted);\n      line-height: 1.35;\n      margin: 0;\n      flex: 1;\n    \n}\n\n#rc-average-size-100-cities .footer-right {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      flex: 0 0 auto;\n    \n}\n\n#rc-average-size-100-cities .brand-logo {\n      height: 22px;\n      width: auto;\n      display: block;\n    \n}\n\n@media (max-width: 700px) {\n#rc-average-size-100-cities .visual-wrap {\n        margin: 10px auto;\n        padding: 0 10px;\n      \n}\n\n#rc-average-size-100-cities .visual-card {\n        padding: 12px 10px 10px;\n      \n}\n\n#rc-average-size-100-cities .visual-title {\n        font-size: 18px;\n        margin-bottom: 18px;\n      \n}\n\n#rc-average-size-100-cities .table-wrap {\n        overflow-x: visible;\n\n}\n\n#rc-average-size-100-cities .visual-table {\n        display: block;\n        width: 100%;\n        min-width: 0;\n\n}\n\n#rc-average-size-100-cities .visual-table thead {\n        display: none;\n\n}\n\n#rc-average-size-100-cities .visual-table tbody {\n        display: block;\n\n}\n\n#rc-average-size-100-cities .visual-table tbody tr {\n        display: grid;\n        grid-template-columns: auto 1fr auto;\n        column-gap: 10px;\n        row-gap: 3px;\n        align-items: baseline;\n        padding: 10px 10px 12px 12px;\n        border-bottom: 1px solid var(--border);\n        border-left: 3px solid var(--border);\n        background: #ffffff !important;\n\n}\n\n#rc-average-size-100-cities .visual-table tbody tr:last-child {\n        border-bottom: none;\n\n}\n\n#rc-average-size-100-cities .visual-table tbody tr.row-positive {\n        border-left-color: var(--purple);\n\n}\n\n#rc-average-size-100-cities .visual-table tbody tr.row-negative {\n        border-left-color: var(--orange);\n\n}\n\n#rc-average-size-100-cities .visual-table td {\n        border-bottom: none;\n        padding: 0;\n        font-size: 13px;\n        white-space: normal;\n\n}\n\n#rc-average-size-100-cities .visual-table td:nth-child(1) {\n        grid-column: 1;\n        grid-row: 1;\n        align-self: center;\n        font-weight: 800;\n        font-size: 15px;\n        color: var(--muted);\n\n}\n\n#rc-average-size-100-cities .visual-table td:nth-child(1)::before {\n        content: \"#\";\n\n}\n\n#rc-average-size-100-cities .visual-table td:nth-child(2) {\n        grid-column: 2;\n        grid-row: 1;\n        text-align: left;\n        font-weight: 700;\n        font-size: 14.5px;\n        color: #1a1a1a;\n\n}\n\n#rc-average-size-100-cities .visual-table td:nth-child(5) {\n        grid-column: 3;\n        grid-row: 1;\n        align-self: center;\n        text-align: right;\n        font-weight: 700;\n        font-size: 12.5px;\n        color: #333333;\n\n}\n\n#rc-average-size-100-cities .visual-table td:nth-child(3) {\n        grid-column: 2 \/ 4;\n        grid-row: 2;\n        text-align: left;\n        font-size: 11.5px;\n        color: var(--muted);\n\n}\n\n#rc-average-size-100-cities .visual-table td:nth-child(3)::before {\n        content: attr(data-label) \": \";\n\n}\n\n#rc-average-size-100-cities .visual-table td.net-change-cell {\n        grid-column: 1 \/ 4;\n        grid-row: 3;\n        padding-top: 6px;\n\n}\n\n#rc-average-size-100-cities .net-change-track {\n        width: 100%;\n\n}\n\n#rc-average-size-100-cities .visual-table td.no-results {\n        grid-column: 1 \/ 4;\n        font-size: 13px;\n\n}\n\n#rc-average-size-100-cities .visual-table td.no-results::before {\n        content: none;\n\n}\n\n#rc-average-size-100-cities .pagination {\n        gap: 6px;\n      \n}\n\n#rc-average-size-100-cities .page-btn {\n        padding: 5px 8px;\n        font-size: 11px;\n      \n}\n\n#rc-average-size-100-cities .search-controls {\n        margin: -8px 0 10px;\n      \n}\n\n#rc-average-size-100-cities .search-label,\n#rc-average-size-100-cities .search-input {\n        font-size: 11px;\n      \n}\n\n#rc-average-size-100-cities .search-input {\n        width: min(190px, 100%);\n        padding: 4px 7px;\n      \n}\n\n#rc-average-size-100-cities .search-count {\n        font-size: 11px;\n      \n}\n\n#rc-average-size-100-cities .notes {\n        font-size: 10px;\n      \n}\n\n#rc-average-size-100-cities .bottom-bar {\n        flex-direction: column;\n        align-items: flex-start;\n      \n}\n\n#rc-average-size-100-cities .footer-right {\n        justify-content: flex-start;\n      \n}\n}\n<\/style>\n\n<div id=\"rc-average-size-100-cities\" class=\"rc-gutenberg-visual\" data-rc-visual=\"rc-average-size-100-cities\">\n<div class=\"visual-wrap\">\n<div class=\"visual-card\" data-rc-id=\"export-card\" id=\"rc-average-size-100-cities-export-card\">\n<h1 class=\"visual-title\">Average size of new apartments in 100 U.S. cities<\/h1>\n<div aria-label=\"Search cities\" class=\"search-controls\" role=\"search\">\n<label class=\"search-label\" for=\"rc-average-size-100-cities-citySearch\">Search city<\/label>\n<input autocomplete=\"off\" class=\"search-input\" data-rc-id=\"citySearch\" id=\"rc-average-size-100-cities-citySearch\" placeholder=\"Search city...\" type=\"search\"\/>\n<button class=\"page-btn clear-search\" data-rc-id=\"clearSearch\" id=\"rc-average-size-100-cities-clearSearch\" type=\"button\">Clear<\/button>\n<span aria-live=\"polite\" class=\"search-count\" data-rc-id=\"searchCount\" id=\"rc-average-size-100-cities-searchCount\">Showing 1-20 of 100 cities<\/span>\n<\/div>\n<div class=\"table-wrap\">\n<table aria-label=\"Average size of new apartments in 100 U.S. cities\" class=\"visual-table\">\n<thead>\n<tr>\n<th scope=\"col\">Rank<\/th>\n<th scope=\"col\">City, state<\/th>\n<th scope=\"col\"><span class=\"header-wrap\">Average size of<br\/>new apartments<\/span><\/th>\n<th scope=\"col\">10-year net change<\/th>\n<th scope=\"col\"><span class=\"header-wrap\">10-year<br\/>percentage<br\/>change<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody data-rc-id=\"tableBody\" id=\"rc-average-size-100-cities-tableBody\"><\/tbody>\n<\/table>\n<\/div>\n<div aria-label=\"Table pagination\" class=\"pagination\">\n<span class=\"pagination-status\" data-rc-id=\"pageStatus\" id=\"rc-average-size-100-cities-pageStatus\">Page 1 of 5<\/span>\n<button class=\"page-btn\" data-rc-id=\"prevPage\" id=\"rc-average-size-100-cities-prevPage\" type=\"button\">Previous<\/button>\n<div aria-label=\"Pages\" data-rc-id=\"pageButtons\" id=\"rc-average-size-100-cities-pageButtons\"><\/div>\n<button class=\"page-btn\" data-rc-id=\"nextPage\" id=\"rc-average-size-100-cities-nextPage\" type=\"button\">Next page<\/button>\n<\/div>\n<div class=\"notes\">\n<p>Average size is in square feet.<\/p>\n<p>To ensure a statistically relevant sample size at city level, new apartments refer to completed units built between 2016 and 2025.<\/p>\n<p>The change is calculated by comparing the average size of new apartments with the average size of apartments completed between 2006 and 2015.<\/p>\n<\/div>\n<div class=\"bottom-bar\">\n<p class=\"source\">\n          Source: RentCafe analysis of Yardi data as of May 2026 \u2022 All data is accurate as of the date of publication.\n        <\/p>\n<div class=\"footer-right\">\n<a href=\"https:\/\/www.rentcafe.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">\n<img decoding=\"async\" alt=\"RentCafe logo\" class=\"brand-logo\" src=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/11\/RentCafe-logo-for-light-background.png?resize=500,128\"\/>\n<\/a>\n<\/div>\n<\/div>\n<div class=\"export-actions\">\n<button class=\"export-btn\" data-rc-download=\"true\" data-rc-download-target=\"export-card\" type=\"button\">Download PNG<\/button>\n<button class=\"export-btn\" data-rc-get-data=\"true\" data-rc-get-data-filename=\"average-size-new-apartments-100-us-cities-data.csv\" type=\"button\">Get data<\/button>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  const root = document.getElementById('rc-average-size-100-cities');\n  if (!root || root.dataset.rcInitialized === 'true') return;\n  root.dataset.rcInitialized = 'true';\n\n  function getById(id) {\n    return root.querySelector('[data-rc-id=\"' + id + '\"]');\n  }\n\n  function loadHtml2Canvas() {\n    if (window.html2canvas) {\n      return Promise.resolve(window.html2canvas);\n    }\n\n    if (window.__rentcafeHtml2CanvasPromise) {\n      return window.__rentcafeHtml2CanvasPromise;\n    }\n\n    window.__rentcafeHtml2CanvasPromise = new Promise(function (resolve, reject) {\n      const existingScript = document.querySelector('script[data-rentcafe-html2canvas=\"true\"]');\n\n      if (existingScript) {\n        existingScript.addEventListener('load', function () {\n          if (window.html2canvas) resolve(window.html2canvas);\n          else reject(new Error('html2canvas loaded but is unavailable.'));\n        }, { once: true });\n        existingScript.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js';\n      script.async = true;\n      script.setAttribute('data-rentcafe-html2canvas', 'true');\n      script.onload = function () {\n        if (window.html2canvas) resolve(window.html2canvas);\n        else reject(new Error('html2canvas loaded but is unavailable.'));\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n\n    return window.__rentcafeHtml2CanvasPromise;\n  }\n\n  function html2canvas(element, options) {\n    return loadHtml2Canvas().then(function (html2canvasLibrary) {\n      return html2canvasLibrary(element, options);\n    });\n  }\n\n  function bindDownloadButton() {\n    const button = root.querySelector('[data-rc-download=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const target = button.getAttribute('data-rc-download-target') || 'export-card';\n      const filename = button.getAttribute('data-rc-download-filename');\n\n      if (filename) {\n        downloadPNG(target, filename);\n      } else {\n        downloadPNG(target);\n      }\n    });\n  }\n\n  function csvEscape(value) {\n    const str = String(value == null ? '' : value).replace(\/\\s+\/g, ' ').trim();\n    if (\/[\",\\n]\/.test(str)) {\n      return '\"' + str.replace(\/\"\/g, '\"\"') + '\"';\n    }\n    return str;\n  }\n\n  function buildCsv() {\n    const header = ['Rank', 'City, state', 'Average size of new apartments (sq. ft.)', '10-year net change (sq. ft.)', '10-year percentage change'];\n    const lines = [header.map(csvEscape).join(',')];\n\n    rows.forEach(function (row) {\n      lines.push([row.rank, row.city, row.size, row.net, row.pct].map(csvEscape).join(','));\n    });\n\n    return lines.join('\\r\\n');\n  }\n\n  function bindGetDataButton() {\n    const button = root.querySelector('[data-rc-get-data=\"true\"]');\n    if (!button) return;\n\n    button.addEventListener('click', function () {\n      const filename = button.getAttribute('data-rc-get-data-filename') || 'data.csv';\n      const csv = buildCsv();\n      const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = filename;\n      link.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  function bindOptionalControls() {\n    const citySearch = getById('citySearch');\n    if (citySearch && typeof handleSearch === 'function') {\n      citySearch.addEventListener('input', handleSearch);\n    }\n\n    const clearSearch = getById('clearSearch');\n    if (clearSearch && typeof clearCitySearch === 'function') {\n      clearSearch.addEventListener('click', clearCitySearch);\n    }\n\n    const prevPage = getById('prevPage');\n    if (prevPage && typeof changePage === 'function') {\n      prevPage.addEventListener('click', function () {\n        changePage(currentPage - 1);\n      });\n    }\n\n    const nextPage = getById('nextPage');\n    if (nextPage && typeof changePage === 'function') {\n      nextPage.addEventListener('click', function () {\n        changePage(currentPage + 1);\n      });\n    }\n\n    const pageButtons = getById('pageButtons');\n    if (pageButtons && typeof changePage === 'function') {\n      pageButtons.addEventListener('click', function (event) {\n        const button = event.target.closest('[data-rc-page]');\n        if (!button || !pageButtons.contains(button)) return;\n        changePage(Number(button.getAttribute('data-rc-page')));\n      });\n    }\n  }\n\n  const rows = [\n        {\n              \"rank\": 1,\n              \"city\": \"Tallahassee, FL\",\n              \"size\": 1156,\n              \"net\": -27,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 2,\n              \"city\": \"Gainesville, FL\",\n              \"size\": 1126,\n              \"net\": 29,\n              \"pct\": \"3%\"\n        },\n        {\n              \"rank\": 3,\n              \"city\": \"Baton Rouge, LA\",\n              \"size\": 1042,\n              \"net\": 11,\n              \"pct\": \"1%\"\n        },\n        {\n              \"rank\": 4,\n              \"city\": \"Knoxville, TN\",\n              \"size\": 1032,\n              \"net\": -44,\n              \"pct\": \"-4%\"\n        },\n        {\n              \"rank\": 5,\n              \"city\": \"Fort Myers, FL\",\n              \"size\": 1032,\n              \"net\": -13,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 6,\n              \"city\": \"Virginia Beach, VA\",\n              \"size\": 1020,\n              \"net\": -17,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 7,\n              \"city\": \"Greensboro, NC\",\n              \"size\": 1017,\n              \"net\": -19,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 8,\n              \"city\": \"Wilmington, NC\",\n              \"size\": 1014,\n              \"net\": 8,\n              \"pct\": \"1%\"\n        },\n        {\n              \"rank\": 9,\n              \"city\": \"Columbia, SC\",\n              \"size\": 1011,\n              \"net\": -154,\n              \"pct\": \"-13%\"\n        },\n        {\n              \"rank\": 10,\n              \"city\": \"Overland Park, KS\",\n              \"size\": 983,\n              \"net\": -56,\n              \"pct\": \"-5%\"\n        },\n        {\n              \"rank\": 11,\n              \"city\": \"Lubbock, TX\",\n              \"size\": 982,\n              \"net\": -75,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 12,\n              \"city\": \"Fresno, CA\",\n              \"size\": 980,\n              \"net\": -24,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 13,\n              \"city\": \"Louisville, KY\",\n              \"size\": 979,\n              \"net\": -72,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 14,\n              \"city\": \"Henderson, NV\",\n              \"size\": 979,\n              \"net\": -46,\n              \"pct\": \"-4%\"\n        },\n        {\n              \"rank\": 15,\n              \"city\": \"Jacksonville, FL\",\n              \"size\": 972,\n              \"net\": -80,\n              \"pct\": \"-8%\"\n        },\n        {\n              \"rank\": 16,\n              \"city\": \"Orlando, FL\",\n              \"size\": 971,\n              \"net\": -74,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 17,\n              \"city\": \"Scottsdale, AZ\",\n              \"size\": 962,\n              \"net\": -11,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 18,\n              \"city\": \"Corpus Christi, TX\",\n              \"size\": 958,\n              \"net\": -72,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 19,\n              \"city\": \"Greenville, SC\",\n              \"size\": 957,\n              \"net\": -80,\n              \"pct\": \"-8%\"\n        },\n        {\n              \"rank\": 20,\n              \"city\": \"Las Vegas, NV\",\n              \"size\": 954,\n              \"net\": -7,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 21,\n              \"city\": \"Frisco, TX\",\n              \"size\": 952,\n              \"net\": 55,\n              \"pct\": \"6%\"\n        },\n        {\n              \"rank\": 22,\n              \"city\": \"Irvine, CA\",\n              \"size\": 950,\n              \"net\": 46,\n              \"pct\": \"5%\"\n        },\n        {\n              \"rank\": 23,\n              \"city\": \"Huntsville, AL\",\n              \"size\": 947,\n              \"net\": -92,\n              \"pct\": \"-9%\"\n        },\n        {\n              \"rank\": 24,\n              \"city\": \"Rochester, NY\",\n              \"size\": 945,\n              \"net\": -48,\n              \"pct\": \"-5%\"\n        },\n        {\n              \"rank\": 25,\n              \"city\": \"Kissimmee, FL\",\n              \"size\": 944,\n              \"net\": -36,\n              \"pct\": \"-4%\"\n        },\n        {\n              \"rank\": 26,\n              \"city\": \"Katy, TX\",\n              \"size\": 941,\n              \"net\": -39,\n              \"pct\": \"-4%\"\n        },\n        {\n              \"rank\": 27,\n              \"city\": \"Tucson, AZ\",\n              \"size\": 939,\n              \"net\": -1,\n              \"pct\": \"0%\"\n        },\n        {\n              \"rank\": 28,\n              \"city\": \"Lexington, KY\",\n              \"size\": 937,\n              \"net\": -111,\n              \"pct\": \"-11%\"\n        },\n        {\n              \"rank\": 29,\n              \"city\": \"McKinney, TX\",\n              \"size\": 936,\n              \"net\": -12,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 30,\n              \"city\": \"Tampa, FL\",\n              \"size\": 934,\n              \"net\": -82,\n              \"pct\": \"-8%\"\n        },\n        {\n              \"rank\": 31,\n              \"city\": \"Irving, TX\",\n              \"size\": 932,\n              \"net\": 12,\n              \"pct\": \"1%\"\n        },\n        {\n              \"rank\": 32,\n              \"city\": \"Raleigh, NC\",\n              \"size\": 930,\n              \"net\": -21,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 33,\n              \"city\": \"Mesa, AZ\",\n              \"size\": 926,\n              \"net\": -60,\n              \"pct\": \"-6%\"\n        },\n        {\n              \"rank\": 34,\n              \"city\": \"Charlotte, NC\",\n              \"size\": 925,\n              \"net\": -40,\n              \"pct\": \"-4%\"\n        },\n        {\n              \"rank\": 35,\n              \"city\": \"Durham, NC\",\n              \"size\": 922,\n              \"net\": -30,\n              \"pct\": \"-3%\"\n        },\n        {\n              \"rank\": 36,\n              \"city\": \"Fort Worth, TX\",\n              \"size\": 914,\n              \"net\": -31,\n              \"pct\": \"-3%\"\n        },\n        {\n              \"rank\": 37,\n              \"city\": \"Colorado Springs, CO\",\n              \"size\": 912,\n              \"net\": -97,\n              \"pct\": \"-10%\"\n        },\n        {\n              \"rank\": 38,\n              \"city\": \"Plano, TX\",\n              \"size\": 911,\n              \"net\": 6,\n              \"pct\": \"1%\"\n        },\n        {\n              \"rank\": 39,\n              \"city\": \"Reno, NV\",\n              \"size\": 910,\n              \"net\": -112,\n              \"pct\": \"-11%\"\n        },\n        {\n              \"rank\": 40,\n              \"city\": \"El Paso, TX\",\n              \"size\": 910,\n              \"net\": -12,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 41,\n              \"city\": \"Houston, TX\",\n              \"size\": 909,\n              \"net\": -48,\n              \"pct\": \"-5%\"\n        },\n        {\n              \"rank\": 42,\n              \"city\": \"St. Petersburg, FL\",\n              \"size\": 909,\n              \"net\": 55,\n              \"pct\": \"6%\"\n        },\n        {\n              \"rank\": 43,\n              \"city\": \"Arlington, TX\",\n              \"size\": 908,\n              \"net\": -287,\n              \"pct\": \"-24%\"\n        },\n        {\n              \"rank\": 44,\n              \"city\": \"Dallas, TX\",\n              \"size\": 905,\n              \"net\": -6,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 45,\n              \"city\": \"Atlanta, GA\",\n              \"size\": 902,\n              \"net\": -47,\n              \"pct\": \"-5%\"\n        },\n        {\n              \"rank\": 46,\n              \"city\": \"San Antonio, TX\",\n              \"size\": 901,\n              \"net\": -47,\n              \"pct\": \"-5%\"\n        },\n        {\n              \"rank\": 47,\n              \"city\": \"Glendale, AZ\",\n              \"size\": 885,\n              \"net\": -141,\n              \"pct\": \"-14%\"\n        },\n        {\n              \"rank\": 48,\n              \"city\": \"Miami, FL\",\n              \"size\": 882,\n              \"net\": -28,\n              \"pct\": \"-3%\"\n        },\n        {\n              \"rank\": 49,\n              \"city\": \"Tempe, AZ\",\n              \"size\": 881,\n              \"net\": -151,\n              \"pct\": \"-15%\"\n        },\n        {\n              \"rank\": 50,\n              \"city\": \"Aurora, CO\",\n              \"size\": 878,\n              \"net\": -104,\n              \"pct\": \"-11%\"\n        },\n        {\n              \"rank\": 51,\n              \"city\": \"Madison, WI\",\n              \"size\": 874,\n              \"net\": -40,\n              \"pct\": \"-4%\"\n        },\n        {\n              \"rank\": 52,\n              \"city\": \"Oklahoma City, OK\",\n              \"size\": 874,\n              \"net\": -30,\n              \"pct\": \"-3%\"\n        },\n        {\n              \"rank\": 53,\n              \"city\": \"Austin, TX\",\n              \"size\": 871,\n              \"net\": -45,\n              \"pct\": \"-5%\"\n        },\n        {\n              \"rank\": 54,\n              \"city\": \"Lewisville, TX\",\n              \"size\": 871,\n              \"net\": -19,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 55,\n              \"city\": \"Indianapolis, IN\",\n              \"size\": 871,\n              \"net\": -2,\n              \"pct\": \"0%\"\n        },\n        {\n              \"rank\": 56,\n              \"city\": \"Wichita, KS\",\n              \"size\": 868,\n              \"net\": -35,\n              \"pct\": \"-4%\"\n        },\n        {\n              \"rank\": 57,\n              \"city\": \"Milwaukee, WI\",\n              \"size\": 866,\n              \"net\": -10,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 58,\n              \"city\": \"Kansas City, MO\",\n              \"size\": 862,\n              \"net\": -27,\n              \"pct\": \"-3%\"\n        },\n        {\n              \"rank\": 59,\n              \"city\": \"Columbus, OH\",\n              \"size\": 862,\n              \"net\": -24,\n              \"pct\": \"-3%\"\n        },\n        {\n              \"rank\": 60,\n              \"city\": \"Memphis, TN\",\n              \"size\": 859,\n              \"net\": -146,\n              \"pct\": \"-15%\"\n        },\n        {\n              \"rank\": 61,\n              \"city\": \"Omaha, NE\",\n              \"size\": 859,\n              \"net\": -61,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 62,\n              \"city\": \"Vancouver, WA\",\n              \"size\": 857,\n              \"net\": -63,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 63,\n              \"city\": \"Alexandria, VA\",\n              \"size\": 856,\n              \"net\": -18,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 64,\n              \"city\": \"Tulsa, OK\",\n              \"size\": 854,\n              \"net\": -144,\n              \"pct\": \"-14%\"\n        },\n        {\n              \"rank\": 65,\n              \"city\": \"Phoenix, AZ\",\n              \"size\": 852,\n              \"net\": -64,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 66,\n              \"city\": \"Birmingham, AL\",\n              \"size\": 849,\n              \"net\": -156,\n              \"pct\": \"-16%\"\n        },\n        {\n              \"rank\": 67,\n              \"city\": \"Cincinnati, OH\",\n              \"size\": 849,\n              \"net\": -52,\n              \"pct\": \"-6%\"\n        },\n        {\n              \"rank\": 68,\n              \"city\": \"Anaheim, CA\",\n              \"size\": 847,\n              \"net\": -136,\n              \"pct\": \"-14%\"\n        },\n        {\n              \"rank\": 69,\n              \"city\": \"Nashville, TN\",\n              \"size\": 845,\n              \"net\": 10,\n              \"pct\": \"1%\"\n        },\n        {\n              \"rank\": 70,\n              \"city\": \"Albuquerque, NM\",\n              \"size\": 844,\n              \"net\": -97,\n              \"pct\": \"-10%\"\n        },\n        {\n              \"rank\": 71,\n              \"city\": \"Denver, CO\",\n              \"size\": 839,\n              \"net\": -17,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 72,\n              \"city\": \"San Diego, CA\",\n              \"size\": 827,\n              \"net\": -84,\n              \"pct\": \"-9%\"\n        },\n        {\n              \"rank\": 73,\n              \"city\": \"St. Louis, MO\",\n              \"size\": 826,\n              \"net\": -21,\n              \"pct\": \"-2%\"\n        },\n        {\n              \"rank\": 74,\n              \"city\": \"Richmond, VA\",\n              \"size\": 826,\n              \"net\": 0,\n              \"pct\": \"0%\"\n        },\n        {\n              \"rank\": 75,\n              \"city\": \"Silver Spring, MD\",\n              \"size\": 823,\n              \"net\": -23,\n              \"pct\": \"-3%\"\n        },\n        {\n              \"rank\": 76,\n              \"city\": \"Arlington, VA\",\n              \"size\": 815,\n              \"net\": -62,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 77,\n              \"city\": \"San Jose, CA\",\n              \"size\": 808,\n              \"net\": -99,\n              \"pct\": \"-11%\"\n        },\n        {\n              \"rank\": 78,\n              \"city\": \"Newark, NJ\",\n              \"size\": 807,\n              \"net\": -91,\n              \"pct\": \"-10%\"\n        },\n        {\n              \"rank\": 79,\n              \"city\": \"Sacramento, CA\",\n              \"size\": 807,\n              \"net\": 4,\n              \"pct\": \"0%\"\n        },\n        {\n              \"rank\": 80,\n              \"city\": \"Cleveland, OH\",\n              \"size\": 805,\n              \"net\": -10,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 81,\n              \"city\": \"Pittsburgh, PA\",\n              \"size\": 804,\n              \"net\": -142,\n              \"pct\": \"-15%\"\n        },\n        {\n              \"rank\": 82,\n              \"city\": \"Baltimore, MD\",\n              \"size\": 790,\n              \"net\": -54,\n              \"pct\": \"-6%\"\n        },\n        {\n              \"rank\": 83,\n              \"city\": \"Jersey City, NJ\",\n              \"size\": 785,\n              \"net\": -79,\n              \"pct\": \"-9%\"\n        },\n        {\n              \"rank\": 84,\n              \"city\": \"Chicago, IL\",\n              \"size\": 774,\n              \"net\": -37,\n              \"pct\": \"-5%\"\n        },\n        {\n              \"rank\": 85,\n              \"city\": \"Los Angeles, CA\",\n              \"size\": 770,\n              \"net\": -50,\n              \"pct\": \"-6%\"\n        },\n        {\n              \"rank\": 86,\n              \"city\": \"St. Paul, MN\",\n              \"size\": 762,\n              \"net\": -102,\n              \"pct\": \"-12%\"\n        },\n        {\n              \"rank\": 87,\n              \"city\": \"Minneapolis, MN\",\n              \"size\": 754,\n              \"net\": -63,\n              \"pct\": \"-8%\"\n        },\n        {\n              \"rank\": 88,\n              \"city\": \"Philadelphia, PA\",\n              \"size\": 747,\n              \"net\": -104,\n              \"pct\": \"-12%\"\n        },\n        {\n              \"rank\": 89,\n              \"city\": \"Boston, MA\",\n              \"size\": 747,\n              \"net\": -90,\n              \"pct\": \"-11%\"\n        },\n        {\n              \"rank\": 90,\n              \"city\": \"Washington, DC\",\n              \"size\": 747,\n              \"net\": -45,\n              \"pct\": \"-6%\"\n        },\n        {\n              \"rank\": 91,\n              \"city\": \"Oakland, CA\",\n              \"size\": 739,\n              \"net\": -89,\n              \"pct\": \"-11%\"\n        },\n        {\n              \"rank\": 92,\n              \"city\": \"Detroit, MI\",\n              \"size\": 736,\n              \"net\": -153,\n              \"pct\": \"-17%\"\n        },\n        {\n              \"rank\": 93,\n              \"city\": \"Manhattan, NY\",\n              \"size\": 735,\n              \"net\": -1,\n              \"pct\": \"0%\"\n        },\n        {\n              \"rank\": 94,\n              \"city\": \"Queens, NY\",\n              \"size\": 732,\n              \"net\": 16,\n              \"pct\": \"2%\"\n        },\n        {\n              \"rank\": 95,\n              \"city\": \"Salt Lake City, UT\",\n              \"size\": 728,\n              \"net\": -64,\n              \"pct\": \"-8%\"\n        },\n        {\n              \"rank\": 96,\n              \"city\": \"San Francisco, CA\",\n              \"size\": 717,\n              \"net\": 35,\n              \"pct\": \"5%\"\n        },\n        {\n              \"rank\": 97,\n              \"city\": \"Brooklyn, NY\",\n              \"size\": 714,\n              \"net\": -6,\n              \"pct\": \"-1%\"\n        },\n        {\n              \"rank\": 98,\n              \"city\": \"Tacoma, WA\",\n              \"size\": 684,\n              \"net\": -152,\n              \"pct\": \"-18%\"\n        },\n        {\n              \"rank\": 99,\n              \"city\": \"Portland, OR\",\n              \"size\": 665,\n              \"net\": -47,\n              \"pct\": \"-7%\"\n        },\n        {\n              \"rank\": 100,\n              \"city\": \"Seattle, WA\",\n              \"size\": 645,\n              \"net\": -47,\n              \"pct\": \"-7%\"\n        }\n  ];\n\n      const rowsPerPage = 20;\n      let currentPage = 1;\n      let filteredRows = [...rows];\n\n      function getRawSearchQuery() {\n        const input = getById('citySearch');\n        return input ? input.value.trim() : '';\n      }\n\n      function getSearchQuery() {\n        return getRawSearchQuery().toLowerCase();\n      }\n\n      function getTotalPages() {\n        return Math.max(1, Math.ceil(filteredRows.length \/ rowsPerPage));\n      }\n\n      function formatNumber(value) {\n        return new Intl.NumberFormat('en-US').format(value);\n      }\n\n      function renderNetChangeBar(value, minValue, maxValue) {\n        const range = maxValue - minValue;\n        const zeroPosition = range ? ((0 - minValue) \/ range) * 100 : 0;\n        const barClass = value > 0 ? 'positive' : value < 0 ? 'negative' : 'zero';\n        const barStart = value < 0 ? zeroPosition + (value \/ range) * 100 : zeroPosition;\n        const barWidth = range ? Math.abs(value \/ range) * 100 : 0;\n        const labelPosition = barWidth >= 16 ? 'inside' : 'outside';\n        const labelClass = value === 0 ? 'zero' : `${barClass} ${labelPosition}`;\n\n        return `\n          <div class=\"net-change-track\" style=\"--zero-position: ${zeroPosition.toFixed(2)}%; --bar-start: ${barStart.toFixed(2)}%; --bar-width: ${barWidth.toFixed(2)}%;\">\n            <span class=\"zero-line\" aria-hidden=\"true\"><\/span>\n            <div class=\"bar-fill ${barClass}\" aria-hidden=\"true\"><\/div>\n            <span class=\"net-label ${labelClass}\">${formatNumber(value)}<\/span>\n          <\/div>\n        `;\n      }\n\n      function renderTable() {\n        const tableBody = getById('tableBody');\n        const minValue = Math.min(0, ...rows.map(row => row.net));\n        const maxValue = Math.max(0, ...rows.map(row => row.net));\n        const totalPages = getTotalPages();\n\n        currentPage = Math.min(Math.max(currentPage, 1), totalPages);\n\n        if (!filteredRows.length) {\n          tableBody.innerHTML = '<tr><td class=\"no-results\" colspan=\"5\">No matching cities found.<\/td><\/tr>';\n          renderPagination();\n          return;\n        }\n\n        const startIndex = (currentPage - 1) * rowsPerPage;\n        const pageRows = filteredRows.slice(startIndex, startIndex + rowsPerPage);\n\n        tableBody.innerHTML = pageRows.map(row => {\n          const pctClass = row.pct.startsWith('-') ? 'negative-value' : '';\n          const rowDirClass = row.net > 0 ? 'row-positive' : row.net < 0 ? 'row-negative' : '';\n\n          return `\n            <tr class=\"${rowDirClass}\">\n              <td>${row.rank}<\/td>\n              <td>${row.city}<\/td>\n              <td data-label=\"Avg. size\">${formatNumber(row.size)}<\/td>\n              <td class=\"net-change-cell\" data-label=\"10-year net change\">${renderNetChangeBar(row.net, minValue, maxValue)}<\/td>\n              <td class=\"${pctClass}\">${row.pct}<\/td>\n            <\/tr>\n          `;\n        }).join('');\n\n        renderPagination();\n      }\n\n      function renderPagination() {\n        const pageStatus = getById('pageStatus');\n        const prevPage = getById('prevPage');\n        const nextPage = getById('nextPage');\n        const pageButtons = getById('pageButtons');\n        const searchCount = getById('searchCount');\n        const clearSearch = getById('clearSearch');\n        const query = getSearchQuery();\n        const rawQuery = getRawSearchQuery();\n        const totalPages = getTotalPages();\n        const hasRows = filteredRows.length > 0;\n        const startIndex = hasRows ? (currentPage - 1) * rowsPerPage : 0;\n        const endIndex = hasRows ? Math.min(startIndex + rowsPerPage, filteredRows.length) : 0;\n\n        if (pageStatus) pageStatus.textContent = hasRows ? `Page ${currentPage} of ${totalPages}` : 'No results';\n        if (prevPage) prevPage.disabled = !hasRows || currentPage === 1;\n        if (nextPage) nextPage.disabled = !hasRows || currentPage === totalPages;\n        if (clearSearch) clearSearch.disabled = !query;\n\n        if (searchCount) {\n          if (!query) {\n            searchCount.textContent = `Showing ${startIndex + 1}-${endIndex} of ${rows.length} cities`;\n          } else if (hasRows) {\n            const label = filteredRows.length === 1 ? 'match' : 'matches';\n            searchCount.textContent = `Showing ${startIndex + 1}-${endIndex} of ${filteredRows.length} ${label} for \"${rawQuery}\"`;\n          } else {\n            searchCount.textContent = `No matches for \"${rawQuery}\"`;\n          }\n        }\n\n        if (pageButtons) {\n          pageButtons.innerHTML = hasRows ? Array.from({ length: totalPages }, (_, index) => {\n            const page = index + 1;\n            const activeClass = page === currentPage ? ' active' : '';\n            return `<button class=\"page-btn${activeClass}\" type=\"button\" data-rc-page=\"${page}\" aria-label=\"Page ${page}\">${page}<\/button>`;\n          }).join('') : '';\n        }\n      }\n\n      function handleSearch() {\n        const query = getSearchQuery();\n        filteredRows = query ? rows.filter(row => row.city.toLowerCase().includes(query)) : [...rows];\n        currentPage = 1;\n        renderTable();\n      }\n\n      function clearCitySearch() {\n        const input = getById('citySearch');\n        if (input) input.value = '';\n        handleSearch();\n        if (input) input.focus();\n      }\n\n      function changePage(page) {\n        currentPage = Math.min(Math.max(page, 1), getTotalPages());\n        renderTable();\n      }\n\n      function downloadPNG(elementId) {\n        const el = getById(elementId);\n        if (!el) return;\n\n        const query = getRawSearchQuery();\n        const searchSlug = query.toLowerCase().replace(\/[^a-z0-9]+\/g, '-').replace(\/^-|-$\/g, '') || 'cities';\n        const filenameSuffix = query ? `search-${searchSlug}-page-${currentPage}` : `page-${currentPage}`;\n\n        const rcExportActions = el.querySelector('.export-actions');\n        const rcExportActionsDisplay = rcExportActions ? rcExportActions.style.display : '';\n        if (rcExportActions) { rcExportActions.style.display = 'none'; }\n        html2canvas(el, {\n          scale: 2,\n          useCORS: true,\n          backgroundColor: '#ffffff'\n        }).then(function (canvas) {\n          if (rcExportActions) { rcExportActions.style.display = rcExportActionsDisplay; }\n          const link = document.createElement('a');\n          link.href = canvas.toDataURL('image\/png');\n          link.download = `average-size-new-apartments-100-us-cities-${filenameSuffix}.png`;\n          link.click();\n        });\n      }\n\n  function initVisual() {\n    bindDownloadButton();\n    bindGetDataButton();\n    bindOptionalControls();\n    if (typeof renderTable === 'function') renderTable();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVisual, { once: true });\n  } else {\n    initVisual();\n  }\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading custom-faq-title\" id=\"h-faq\">FAQ<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1786362383269\"><strong class=\"schema-faq-question\"><strong>Q:\u00a0What is the average apartment size in the U.S. in 2025?<\/strong>\u00a0<\/strong> <p class=\"schema-faq-answer\">A:\u00a0The average apartment size in the U.S. is 910 square\u00a0feet,\u00a0which is an increase of\u00a013 square feet.\u00a0<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1786362397831\"><strong class=\"schema-faq-question\"><strong>Q:\u00a0Which cities\u00a0have\u00a0the largest apartments in the nation?<\/strong>\u00a0<\/strong> <p class=\"schema-faq-answer\">A:\u00a0Tallahassee, FL, has the largest apartments, averaging 1,156 square feet. Gainesville, FL, ranks second at 1,126 square feet, followed by Baton Rouge, LA, at 1,042 square feet.\u00a0<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1786362412551\"><strong class=\"schema-faq-question\"><strong>Q:\u00a0Which cities\u00a0have\u00a0the smallest apartments?<\/strong>\u00a0<\/strong> <p class=\"schema-faq-answer\">A: Seattle has the smallest apartments in the nation, averaging 645 square feet. Portland, OR, follows at 665 square feet, while Tacoma, WA, averages 684 square feet and Brooklyn, NY, comes in at 714 square feet.\u00a0<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1786362433458\"><strong class=\"schema-faq-question\"><strong>Q:\u00a0Which apartment type saw the biggest size increase?<\/strong>\u00a0<\/strong> <p class=\"schema-faq-answer\">A:\u00a0Three-bedroom apartments saw the largest gain, adding\u00a028 square feet\u00a0over the last decade to\u00a0average\u00a01,355 square feet.\u00a0\u00a0<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1786362443731\"><strong class=\"schema-faq-question\"><strong>Q:\u00a0Which cities\u00a0gained\u00a0the most living space over the last decade?<\/strong>\u00a0<\/strong> <p class=\"schema-faq-answer\">A:\u00a0Frisco, TX, and St. Petersburg, FL, stand out as the cities with the largest gains, adding\u00a055 square feet\u00a0of living space. They are followed by Irvine, CA, with an increase of\u00a046 square feet.<\/p> <\/div> <\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Methodology<\/h2>\n\n\n\n<p><em>This report was compiled by&nbsp;<a href=\"https:\/\/www.rentcafe.com\/\">RentCafe.com<\/a>, a nationwide apartment search website that enables renters to easily find apartments and houses for rent throughout the U.S.<\/em><\/p>\n\n\n\n<p><em>The apartment size and rent data were provided by Yardi Matrix as of June 2026. Yardi Matrix is a RentCafe.com sister company specializing in apartment market intelligence and providing up-to-date information on large-scale, multifamily properties of 50 units or more in more than 177 U.S. markets. <\/em><em>Unit types were categorized by the number of bedrooms (zero, one, two or three) as defined by Yardi Matrix.&nbsp;<span data-teams=\"true\">All data is accurate as of the date of publication.<\/span><\/em><\/p>\n\n\n\n<p><em>Rankings were based on the top 100 U.S. cities with the largest stock of apartments (sometimes referred to as \u201clargest cities for renters\u201d) located in multifamily buildings of 50 units or more. To ensure a relevant sample size, we excluded cities where the number of units completed in one year was less than 500.<\/em><\/p>\n\n\n\n<p><em>When looking at the changes in apartment size in each city, we considered \u201cnew apartments\u201d as those units that were built between 2016 and 2025. This ensured a statistically relevant sample size and avoided yearly fluctuations that do not necessarily show a trend.<\/em><\/p>\n\n\n\n<p><em>To measure changes in apartment size over time, units built between 2016 and 2025 were compared against those built in the previous decade (2006 to 2015).<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-fair-use-and-redistribution\"><strong>Fair use and redistribution<\/strong><\/h2>\n\n\n\n<p>We encourage you and freely grant you permission to reuse, host, or repost the research, graphics, and images presented in this article. When doing so, we ask that you credit our research by linking to RentCafe.com or this page, so that your readers can learn more about this project, the research behind it and its methodology. For more in-depth, customized data, please contact us at media@rentcafe.com.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;re hoping for larger floor plans, the good news is that apartment sizes have increased in 2025 compared to the previous year. More precisely, floor plans currently average 910 square feet nationwide with every unit type having gained additional living space. As apartment sizes expand, much of that growth is concentrated in Southern markets,&hellip;<\/p>\n","protected":false},"author":3055,"featured_media":149034,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3661],"tags":[],"class_list":["post-138390","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-market-snapshots","gallery-content-unit"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.0 (Yoast SEO v28.0) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Where are U.S. apartment sizes growing?<\/title>\n<meta name=\"description\" content=\"Explore how apartment size is changing across the U.S. and discover which cities are giving renters the most space for their money.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"U.S. apartment sizes are growing: Where are renters gaining the most space?\" \/>\n<meta property=\"og:description\" content=\"Explore how apartment size is changing across the U.S. and discover which cities are giving renters the most space for their money.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/\" \/>\n<meta property=\"og:site_name\" content=\"RentCafe rental blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-10T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-25T11:25:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/07\/apartment-size-2025-featured-image.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Adina Dragos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adina Dragos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/\"},\"author\":{\"name\":\"Adina Dragos\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/#\\\/schema\\\/person\\\/5f15d322771354ddad211157b5c7ee90\"},\"headline\":\"U.S. apartment sizes are growing: Where are renters gaining the most space?\",\"datePublished\":\"2026-08-10T07:00:00+00:00\",\"dateModified\":\"2026-08-25T11:25:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/\"},\"wordCount\":2453,\"image\":{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/62\\\/2026\\\/07\\\/apartment-size-2025-featured-image.jpg\",\"articleSection\":[\"Market Insights\"],\"inLanguage\":\"en-US\"},{\"@type\":[\"WebPage\",\"FAQPage\"],\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/\",\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/\",\"name\":\"Where are U.S. apartment sizes growing?\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/62\\\/2026\\\/07\\\/apartment-size-2025-featured-image.jpg\",\"datePublished\":\"2026-08-10T07:00:00+00:00\",\"dateModified\":\"2026-08-25T11:25:02+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/#\\\/schema\\\/person\\\/5f15d322771354ddad211157b5c7ee90\"},\"description\":\"Explore how apartment size is changing across the U.S. and discover which cities are giving renters the most space for their money.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#breadcrumb\"},\"mainEntity\":[{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362383269\"},{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362397831\"},{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362412551\"},{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362433458\"},{\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362443731\"}],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/62\\\/2026\\\/07\\\/apartment-size-2025-featured-image.jpg\",\"contentUrl\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/62\\\/2026\\\/07\\\/apartment-size-2025-featured-image.jpg\",\"width\":1400,\"height\":600,\"caption\":\"Bright living room with sofas and green plants, illustrating how apartment size can influence comfort, layout, and usable living space.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"U.S. apartment sizes are growing: Where are renters gaining the most space?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/\",\"name\":\"RentCafe rental blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/#\\\/schema\\\/person\\\/5f15d322771354ddad211157b5c7ee90\",\"name\":\"Adina Dragos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/62\\\/2023\\\/01\\\/Adina_Dragos.png?w=96\",\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/62\\\/2023\\\/01\\\/Adina_Dragos.png?w=96\",\"contentUrl\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/62\\\/2023\\\/01\\\/Adina_Dragos.png?w=96\",\"caption\":\"Adina Dragos\"},\"description\":\"Adina Dragos is a real estate writer and research analyst with RentCafe. She has solid experience in real estate writing, covering topics ranging from best cities for renters and the top cities for rental activity to cost of living. Her work was featured in several prominent media channels such as Axios, The Dallas Morning News, ConnectCRE and The New York Times.\",\"birthDate\":\"1995-08-01\",\"gender\":\"Female\",\"jobTitle\":\"Creative Writer\",\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/author\\\/adinadragos\\\/\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362383269\",\"position\":1,\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362383269\",\"name\":\"Q:\u00a0What is the average apartment size in the U.S. in 2025?\u00a0\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A:\u00a0The average apartment size in the U.S. is 910 square\u00a0feet,\u00a0which is an increase of\u00a013 square feet.\u00a0\",\"inLanguage\":\"en-US\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362397831\",\"position\":2,\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362397831\",\"name\":\"Q:\u00a0Which cities\u00a0have\u00a0the largest apartments in the nation?\u00a0\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A:\u00a0Tallahassee, FL, has the largest apartments, averaging 1,156 square feet. Gainesville, FL, ranks second at 1,126 square feet, followed by Baton Rouge, LA, at 1,042 square feet.\u00a0\",\"inLanguage\":\"en-US\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362412551\",\"position\":3,\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362412551\",\"name\":\"Q:\u00a0Which cities\u00a0have\u00a0the smallest apartments?\u00a0\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A: Seattle has the smallest apartments in the nation, averaging 645 square feet. Portland, OR, follows at 665 square feet, while Tacoma, WA, averages 684 square feet and Brooklyn, NY, comes in at 714 square feet.\u00a0\",\"inLanguage\":\"en-US\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362433458\",\"position\":4,\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362433458\",\"name\":\"Q:\u00a0Which apartment type saw the biggest size increase?\u00a0\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A:\u00a0Three-bedroom apartments saw the largest gain, adding\u00a028 square feet\u00a0over the last decade to\u00a0average\u00a01,355 square feet.\u00a0\u00a0\",\"inLanguage\":\"en-US\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362443731\",\"position\":5,\"url\":\"https:\\\/\\\/www.rentcafe.com\\\/blog\\\/rental-market\\\/market-snapshots\\\/national-average-apartment-size\\\/#faq-question-1786362443731\",\"name\":\"Q:\u00a0Which cities\u00a0gained\u00a0the most living space over the last decade?\u00a0\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A:\u00a0Frisco, TX, and St. Petersburg, FL, stand out as the cities with the largest gains, adding\u00a055 square feet\u00a0of living space. They are followed by Irvine, CA, with an increase of\u00a046 square feet.\",\"inLanguage\":\"en-US\"},\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Where are U.S. apartment sizes growing?","description":"Explore how apartment size is changing across the U.S. and discover which cities are giving renters the most space for their money.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/","og_locale":"en_US","og_type":"article","og_title":"U.S. apartment sizes are growing: Where are renters gaining the most space?","og_description":"Explore how apartment size is changing across the U.S. and discover which cities are giving renters the most space for their money.","og_url":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/","og_site_name":"RentCafe rental blog","article_published_time":"2026-08-10T07:00:00+00:00","article_modified_time":"2026-08-25T11:25:02+00:00","og_image":[{"width":1400,"height":600,"url":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/07\/apartment-size-2025-featured-image.jpg","type":"image\/jpeg"}],"author":"Adina Dragos","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Adina Dragos","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#article","isPartOf":{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/"},"author":{"name":"Adina Dragos","@id":"https:\/\/www.rentcafe.com\/blog\/#\/schema\/person\/5f15d322771354ddad211157b5c7ee90"},"headline":"U.S. apartment sizes are growing: Where are renters gaining the most space?","datePublished":"2026-08-10T07:00:00+00:00","dateModified":"2026-08-25T11:25:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/"},"wordCount":2453,"image":{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#primaryimage"},"thumbnailUrl":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/07\/apartment-size-2025-featured-image.jpg","articleSection":["Market Insights"],"inLanguage":"en-US"},{"@type":["WebPage","FAQPage"],"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/","url":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/","name":"Where are U.S. apartment sizes growing?","isPartOf":{"@id":"https:\/\/www.rentcafe.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#primaryimage"},"image":{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#primaryimage"},"thumbnailUrl":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/07\/apartment-size-2025-featured-image.jpg","datePublished":"2026-08-10T07:00:00+00:00","dateModified":"2026-08-25T11:25:02+00:00","author":{"@id":"https:\/\/www.rentcafe.com\/blog\/#\/schema\/person\/5f15d322771354ddad211157b5c7ee90"},"description":"Explore how apartment size is changing across the U.S. and discover which cities are giving renters the most space for their money.","breadcrumb":{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#breadcrumb"},"mainEntity":[{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362383269"},{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362397831"},{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362412551"},{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362433458"},{"@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362443731"}],"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#primaryimage","url":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/07\/apartment-size-2025-featured-image.jpg","contentUrl":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/07\/apartment-size-2025-featured-image.jpg","width":1400,"height":600,"caption":"Bright living room with sofas and green plants, illustrating how apartment size can influence comfort, layout, and usable living space."},{"@type":"BreadcrumbList","@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.rentcafe.com\/blog\/"},{"@type":"ListItem","position":2,"name":"U.S. apartment sizes are growing: Where are renters gaining the most space?"}]},{"@type":"WebSite","@id":"https:\/\/www.rentcafe.com\/blog\/#website","url":"https:\/\/www.rentcafe.com\/blog\/","name":"RentCafe rental blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.rentcafe.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.rentcafe.com\/blog\/#\/schema\/person\/5f15d322771354ddad211157b5c7ee90","name":"Adina Dragos","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/01\/Adina_Dragos.png?w=96","url":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/01\/Adina_Dragos.png?w=96","contentUrl":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2023\/01\/Adina_Dragos.png?w=96","caption":"Adina Dragos"},"description":"Adina Dragos is a real estate writer and research analyst with RentCafe. She has solid experience in real estate writing, covering topics ranging from best cities for renters and the top cities for rental activity to cost of living. Her work was featured in several prominent media channels such as Axios, The Dallas Morning News, ConnectCRE and The New York Times.","birthDate":"1995-08-01","gender":"Female","jobTitle":"Creative Writer","url":"https:\/\/www.rentcafe.com\/blog\/author\/adinadragos\/"},{"@type":"Question","@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362383269","position":1,"url":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362383269","name":"Q:\u00a0What is the average apartment size in the U.S. in 2025?\u00a0","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"A:\u00a0The average apartment size in the U.S. is 910 square\u00a0feet,\u00a0which is an increase of\u00a013 square feet.\u00a0","inLanguage":"en-US"},"inLanguage":"en-US"},{"@type":"Question","@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362397831","position":2,"url":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362397831","name":"Q:\u00a0Which cities\u00a0have\u00a0the largest apartments in the nation?\u00a0","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"A:\u00a0Tallahassee, FL, has the largest apartments, averaging 1,156 square feet. Gainesville, FL, ranks second at 1,126 square feet, followed by Baton Rouge, LA, at 1,042 square feet.\u00a0","inLanguage":"en-US"},"inLanguage":"en-US"},{"@type":"Question","@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362412551","position":3,"url":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362412551","name":"Q:\u00a0Which cities\u00a0have\u00a0the smallest apartments?\u00a0","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"A: Seattle has the smallest apartments in the nation, averaging 645 square feet. Portland, OR, follows at 665 square feet, while Tacoma, WA, averages 684 square feet and Brooklyn, NY, comes in at 714 square feet.\u00a0","inLanguage":"en-US"},"inLanguage":"en-US"},{"@type":"Question","@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362433458","position":4,"url":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362433458","name":"Q:\u00a0Which apartment type saw the biggest size increase?\u00a0","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"A:\u00a0Three-bedroom apartments saw the largest gain, adding\u00a028 square feet\u00a0over the last decade to\u00a0average\u00a01,355 square feet.\u00a0\u00a0","inLanguage":"en-US"},"inLanguage":"en-US"},{"@type":"Question","@id":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362443731","position":5,"url":"https:\/\/www.rentcafe.com\/blog\/rental-market\/market-snapshots\/national-average-apartment-size\/#faq-question-1786362443731","name":"Q:\u00a0Which cities\u00a0gained\u00a0the most living space over the last decade?\u00a0","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"A:\u00a0Frisco, TX, and St. Petersburg, FL, stand out as the cities with the largest gains, adding\u00a055 square feet\u00a0of living space. They are followed by Irvine, CA, with an increase of\u00a046 square feet.","inLanguage":"en-US"},"inLanguage":"en-US"}]}},"jetpack_featured_media_url":"https:\/\/www.rentcafe.com\/blog\/wp-content\/uploads\/sites\/62\/2026\/07\/apartment-size-2025-featured-image.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/posts\/138390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/users\/3055"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/comments?post=138390"}],"version-history":[{"count":10,"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/posts\/138390\/revisions"}],"predecessor-version":[{"id":150197,"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/posts\/138390\/revisions\/150197"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/media\/149034"}],"wp:attachment":[{"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/media?parent=138390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/categories?post=138390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rentcafe.com\/blog\/wp-json\/wp\/v2\/tags?post=138390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}