{"zip":"78228","city":"San Antonio","state":"TX","county":"Bexar County","countySlug":"bexar-county-tx","metro":"San Antonio-New Braunfels, TX","metroSlug":"san-antonio-tx","citySlug":"san-antonio-tx","rentPeriod":"2026-06","acsPeriod":"ACS 2024 5-year","directRent":1216,"rentYoy":0.0207,"bedroomEstimates":[917,1007,1216,1565,1814],"hudFmr":[920,1010,1220,1570,1820],"ladderSource":"safmr","population":56165,"populationMoe":2729,"medianIncome":52976,"medianIncomeMoe":3572,"medianGrossRent":1032,"medianGrossRentMoe":55,"housingUnits":21432,"occupiedUnits":19374,"vacantUnits":2058,"renterOccupied":7878,"rentBurdenTotal":7878,"rentBurden30Plus":4243,"vacantForRent":927,"vacantForSale":92,"vacantSeasonal":160,"structureTotal":21432,"singleFamilyUnits":15741,"largeMultifamilyUnits":1232,"vacancyRate":0.09602463605823068,"renterShare":0.4066274388355528,"rentBurdenShare":0.5385884742320386,"requiredIncome":48640,"askingRentToIncome":0.27544548474781033,"askingVsAcsRent":1.178294573643411,"askingVsHud2br":0.9967213114754099,"cityRent":1381.6424039371357,"countyRent":1389,"metroRent":1416,"cityGrossRent":1324,"countyGrossRent":1354,"countyListings":9069,"countyListingDom":57,"countyPriceReducedShare":0.2741,"countyListingPeriod":"2026-06","metroMonthsSupply":5.4,"metroMedianDom":72,"metroPriceDrops":0.3804,"metroResalePeriod":"2026-05-01","apartmentVacancy":0.089082261488219,"apartmentTimeOnMarket":37.3,"zipResalePeriodBegin":"2026-04-01","zipResalePeriodEnd":"2026-06-30","zipResaleUpdated":"2026-07-03","zipHomesSold":55,"zipSalePrice":179859,"zipSalePriceYoy":-0.1634,"zipMedianDom":70,"zipActiveListings":201,"zipActiveListingsYoy":-0.1567,"zipInventory":121,"zipInventoryYoy":-0.1901,"zipPendingSales":81,"zipMonthsSupply":6.8,"zipSaleToList":0.9213,"zipSoldAboveList":0.0567,"zipOffMarketTwoWeeks":0.2592,"generatedAt":"2026-09-01 10:17:28.214174+00","summaryHtml":"<p>In 78228, the direct rolling-three-month ZIP resale observation presents a notably softer for-sale setting than the rent index alone would imply. Median sold price was $179,859, down 16.34% year over year, while 55 homes sold and median marketing time reached 70 days. Inventory stood at 121 homes, equivalent to 6.8 months of supply. The average sale-to-list ratio was 92.13%, only 5.67% of sales closed above list, and 25.92% went off market within two weeks. Those are resale-market signals only: they describe completed home sales, listings, and marketing conditions rather than rental transactions, apartment availability, or property-level rental economics.</p><p>The current Zillow ZIP asking-rent index is $1,216 per month, with a 2.07% year-over-year increase. Zillow ZORI is a typical observed asking-rent index blended across rental types, so it is not a lease-specific quote or a survey of occupied homes. As wider-context benchmarks, San Antonio city has a $1,381.64 rent context value, Bexar County has a $1,389 context value, and the San Antonio-New Braunfels metro has a $1,416 context value; each is a broader geography, not a substitute for the ZIP reading. The ZIP’s lower asking-rent index therefore establishes relative positioning against those contexts, without identifying a cause or an individual unit’s rent.</p><p>The longer Zillow history remains positive but has slowed. Exact same-month annualized change was 2.07% over 1 year, 3.13% over 3 years, and 5.14% over 5 years. Recent direction thus confirms continued rent growth, yet it does not confirm the stronger pace shown by the longer path. Monthly-return variability annualized to 4.73%, consistent with the high-variability history classification and reducing confidence that one current index value fully represents a stable trajectory. Separately, the largest peak-to-trough drawdown was 7.50%, showing that past asking-rent movement included meaningful reversals. Coverage was 97.78%. Transparent national discovery ranks among history-eligible ZIPs were 1,212 for momentum, 2,792 for stability, and 2,194 for the balanced measure, where lower ranks are higher. These are backward-looking discovery measurements, not forecasts or investment recommendations.</p><p>The local bedroom ladder should be read as modelled estimates, not measured bedroom rents. Scaling ZIP ZORI with the local HUD ladder produces estimates of $917 for a studio, $1,007 for a one-bedroom, $1,216 for a two-bedroom, $1,565 for a three-bedroom, and $1,814 for a four-bedroom. HUD FMR or SAFMR is an administrative bedroom-specific standard, not an asking-rent measure, which is why the ladder provides a scaling device rather than rental comparables. By contrast, the matched ACS ZCTA median gross rent is $1,032, or 17.83% below the Zillow asking-rent index. ACS is a five-year survey of occupied renter homes and includes selected utilities, so that gap compares distinct universes rather than proving that one source is wrong.</p><p>The 30% required-income screen translates the current asking-rent index into $48,640 of annual income under that arithmetic convention. This is not advice, an applicant qualification rule, or evidence that a household can obtain a particular home. The matched ZCTA median household income is $52,976, making the index-based screen equal to 27.54% of that median income before considering household composition, utilities, concessions, or lease terms. In the ACS 2024 five-year renter-household survey, 53.86% of renter households were burdened at 30% or more of income. That burden measure describes surveyed households, not the payment experience of a specific renter or the affordability of a particular available unit.</p><p>The Census housing profile supplies useful scale but requires a geography caution. The five-digit label is both a Zillow ZIP market identifier and the matched Census ZCTA; a ZCTA is a statistical area and is not identical to a USPS delivery ZIP. The ZCTA contained 21,432 housing units, with a 9.60% vacancy rate and a 40.66% renter share. Its stock included 15,741 single-family units and 1,232 units in large multifamily structures. These counts help frame the mix represented in the survey, while the vacancy rate remains an area-level estimate rather than proof that any specific rental is available, competitively priced, or vacant for the same reason as another unit.</p><p>The central tension is that ZIP asking rent has continued upward at a reduced pace while the direct resale record shows lower sold prices and weaker sale-to-list outcomes. The annualized ZIP ZORI divided by median sold price produces an 8.11% cross-source screening ratio. It is neither a cap rate, net return, expected return, nor property yield because it excludes property-specific income, expenses, financing, taxes, insurance, maintenance, vacancies, and transaction differences. The resale evidence challenges any simple reading of positive rent history as broadly stable market strength: resale liquidity, price direction, and rental asking rents are separate observations that can move differently. Likewise, the household income screen sits below its arithmetic threshold while the surveyed renter burden remains elevated.</p><p>Decision use depends on testing the address-level facts that these aggregate measures cannot supply. Confirm the actual advertised rent, bedroom count, lease duration, concessions, utility inclusions, move-in timing, and comparable currently available rentals before treating the modelled ladder as relevant. For a home under consideration for sale or purchase, verify the specific listing history, recent closed sales used for comparison, contract terms, physical condition disclosures, and recurring ownership obligations rather than applying the ZIP screening ratio to the property. Zillow, ACS, HUD, and Redfin answer different questions on different populations and time windows. The useful closing question is whether the particular unit’s documented all-in terms still fit the household’s circumstances after those source boundaries are respected.</p>","findings":[{"body":"The same-month Zillow history shows positive asking-rent growth across the measured horizons, but the shorter-horizon pace is below the longer-horizon pace. High monthly-return variability and a meaningful historical drawdown mean the current ZIP index should be treated as a current market signal with uncertainty, not as a smooth or guaranteed path.","title":"Rent growth remains positive but is decelerating"},{"body":"Zillow ZORI measures a blended typical asking-rent index, while ACS median gross rent reflects occupied renter homes and includes selected utilities. HUD standards are administrative, bedroom-specific benchmarks. The bedroom ladder is therefore a model that uses HUD proportions to scale the ZIP index; it does not establish observed asking rents for individual bedroom categories.","title":"Source differences are material, not contradictory"},{"body":"The direct ZIP resale record shows declining median sold price, extended marketing time, supply above a short-turnover level, and sale-to-list outcomes below full list price. Those conditions belong only to the for-sale universe. They nevertheless create an important cross-market tension with the still-rising asking-rent index and slower rent-growth history.","title":"Resale indicators challenge a simple rent-only reading"},{"body":"The required-income figure is a mechanical conversion of the ZIP asking-rent index under a 30% convention, not a tenant-screening rule. ACS burden data indicate that many surveyed renter households devote at least that share of income to housing, but neither the burden statistic nor the vacancy estimate identifies the costs, availability, or qualification outcome for one unit.","title":"Area affordability measures require household-level verification"}],"risks":["Zillow ZORI is an aggregate asking-rent index blended across rental types, so it can differ materially from a unit’s lease offer, concessions, utility treatment, bedroom count, and move-in date.","ACS results are matched-ZCTA five-year survey estimates for occupied homes, carry survey uncertainty, and cannot be read as a current inventory report or as evidence about a particular renter household.","The HUD-scaled bedroom figures are modelled estimates rather than observed bedroom rents, and the local ladder does not account for property condition, lease terms, included utilities, or landlord concessions.","Redfin resale measures cover for-sale activity only; using the rent-to-price screening ratio as property economics would omit expenses, financing, taxes, maintenance, occupancy, and property-specific income evidence."],"qa":[{"a":"The measures cover different housing and time universes. Zillow ZORI is a current-style blended asking-rent index across rental types, whereas ACS median gross rent is a five-year survey measure for occupied renter homes and includes selected utilities. The difference does not identify an error or establish the rent of a particular available home.","q":"Why is the Zillow asking-rent index higher than ACS median gross rent?"},{"a":"No. They are modelled monthly estimates created by scaling the ZIP Zillow asking-rent index with the local HUD bedroom ladder. HUD FMR or SAFMR is an administrative standard, not an asking-rent survey. A specific studio, apartment, or house may differ because of its terms, condition, utility package, and timing.","q":"Are the bedroom amounts actual observed rents in the ZIP?"},{"a":"It means the current asking-rent index should be given less confidence as a stand-alone representation of a stable path. The historical series remained positive over measured horizons, but its pace slowed and it experienced a meaningful peak-to-trough decline. Those are backward-looking observations, not a prediction of the next rent movement.","q":"What does the high-variability rent history mean for interpreting the current index?"},{"a":"Use it as a separate direct ZIP for-sale observation. Median sold price, marketing time, inventory, supply, and sale-to-list measures describe resale liquidity and transaction conditions, not apartment leasing. The annualized rent-to-price figure is only a cross-source screening ratio and requires property-level income and expense verification before any economic interpretation.","q":"How should the resale evidence be used alongside rental data?"}],"sources":[{"key":"apartment_list_time_on_market","name":"Apartment List Time on Market — listing liquidity","release":"Apartment List 2026-07","pulledAt":"2026-08-08","url":"https://www.apartmentlist.com/research/category/data-rent-estimates"},{"key":"apartment_list_vacancy","name":"Apartment List Vacancy Index — rental vacancy","release":"Apartment List 2026-07","pulledAt":"2026-08-08","url":"https://www.apartmentlist.com/research/apartment-list-vacancy-index-methodology"},{"key":"census_zcta_facts","name":"Census ACS five-year — ZCTA housing and income","release":"ACS 2024 5-year ZCTA","pulledAt":"2026-08-08","url":"https://api.census.gov/data/2024/acs/acs5.html"},{"key":"hud_zip","name":"HUD USPS crosswalk and Small Area FMRs — ZIP rent fallback","release":"ZIP-CBSA 2025Q4 + SAFMR FY2026","pulledAt":"2026-07-26","url":"https://www.huduser.gov/portal/datasets/usps_crosswalk.html"},{"key":"realtor_county","name":"Realtor.com Economic Research — county listing inventory","release":"county inventory 2026-06","pulledAt":"2026-07-28","url":"https://www.realtor.com/research/data/"},{"key":"redfin","name":"Redfin Data Center — inventory, days on market, and price cuts","release":"metro tracker through 2026-05-01","pulledAt":"2026-07-26","url":"https://www.redfin.com/news/data-center/"},{"key":"redfin_zip","name":"Redfin Data Center — ZIP resale activity and supply","release":"ZIP rolling 3 months through 2026-06-30; updated 2026-07-03","pulledAt":"2026-08-12","url":"https://www.redfin.com/news/data-center/"},{"key":"zillow_county","name":"Zillow ZHVI and ZORI — county values and rents","release":"county ZHVI/ZORI 2026-06","pulledAt":"2026-07-26","url":"https://www.zillow.com/research/data/"},{"key":"zillow_zori","name":"Zillow ZORI — metro market rents","release":"Metro_zori_uc_sfrcondomfr_sm_sa_month.csv","pulledAt":"2026-07-26","url":"https://www.zillow.com/research/data/"},{"key":"zillow_zori_city","name":"Zillow ZORI — city market rents","release":"zillow_zori_city.csv","pulledAt":"2026-07-29","url":"https://www.zillow.com/research/data/"},{"key":"zillow_zori_zip","name":"Zillow ZORI — ZIP market rents","release":"ZORI ZIP 2026-06","pulledAt":"2026-08-08","url":"https://www.zillow.com/research/data/"}],"history":[{"period":"2019-01-01","rent":818.414466},{"period":"2019-02-01","rent":829.042839},{"period":"2019-03-01","rent":836.769931},{"period":"2019-04-01","rent":835.180303},{"period":"2019-05-01","rent":840.052233},{"period":"2019-06-01","rent":846.057851},{"period":"2019-07-01","rent":862.267338},{"period":"2019-08-01","rent":861.378459},{"period":"2019-09-01","rent":859.501903},{"period":"2019-10-01","rent":854.441937},{"period":"2019-11-01","rent":851.709867},{"period":"2020-01-01","rent":846.527536},{"period":"2020-02-01","rent":845.576372},{"period":"2020-03-01","rent":860.886361},{"period":"2020-04-01","rent":860.885335},{"period":"2020-05-01","rent":863.883334},{"period":"2020-06-01","rent":878.645318},{"period":"2020-07-01","rent":888.794046},{"period":"2020-08-01","rent":911.905042},{"period":"2020-09-01","rent":916.445866},{"period":"2020-10-01","rent":911.677535},{"period":"2020-11-01","rent":908.458856},{"period":"2020-12-01","rent":918.761449},{"period":"2021-01-01","rent":927.498579},{"period":"2021-02-01","rent":939.898163},{"period":"2021-03-01","rent":945.115184},{"period":"2021-04-01","rent":949.017388},{"period":"2021-05-01","rent":947.185221},{"period":"2021-06-01","rent":947.020875},{"period":"2021-07-01","rent":948.602967},{"period":"2021-08-01","rent":954.914655},{"period":"2021-09-01","rent":957.912492},{"period":"2021-10-01","rent":975.328495},{"period":"2021-11-01","rent":986.350838},{"period":"2021-12-01","rent":992.879707},{"period":"2022-01-01","rent":1002.467853},{"period":"2022-02-01","rent":1027.571351},{"period":"2022-03-01","rent":1058.724547},{"period":"2022-04-01","rent":1068.428566},{"period":"2022-05-01","rent":1082.682036},{"period":"2022-06-01","rent":1060.709753},{"period":"2022-07-01","rent":1068.567009},{"period":"2022-08-01","rent":1051.623972},{"period":"2022-10-01","rent":1054.157239},{"period":"2022-11-01","rent":1072.162317},{"period":"2022-12-01","rent":1097.894009},{"period":"2023-01-01","rent":1100.407412},{"period":"2023-02-01","rent":1088.091692},{"period":"2023-03-01","rent":1062.429934},{"period":"2023-04-01","rent":1080.020563},{"period":"2023-05-01","rent":1083.58342},{"period":"2023-06-01","rent":1109.1778},{"period":"2023-07-01","rent":1107.588861},{"period":"2023-08-01","rent":1130.56293},{"period":"2023-09-01","rent":1140.591973},{"period":"2023-10-01","rent":1185.374095},{"period":"2023-11-01","rent":1152.512941},{"period":"2023-12-01","rent":1122.425095},{"period":"2024-01-01","rent":1096.516456},{"period":"2024-02-01","rent":1123.356418},{"period":"2024-03-01","rent":1157.674022},{"period":"2024-04-01","rent":1152.472871},{"period":"2024-05-01","rent":1155.381322},{"period":"2024-06-01","rent":1172.739158},{"period":"2024-07-01","rent":1197.414525},{"period":"2024-08-01","rent":1208.63883},{"period":"2024-09-01","rent":1191.235001},{"period":"2024-10-01","rent":1169.267198},{"period":"2024-11-01","rent":1177.689409},{"period":"2024-12-01","rent":1199.415699},{"period":"2025-01-01","rent":1217.074485},{"period":"2025-02-01","rent":1194.92593},{"period":"2025-03-01","rent":1172.559016},{"period":"2025-04-01","rent":1196.840886},{"period":"2025-05-01","rent":1199.636309},{"period":"2025-06-01","rent":1191.788613},{"period":"2025-07-01","rent":1180.928111},{"period":"2025-08-01","rent":1173.514552},{"period":"2025-09-01","rent":1186.937645},{"period":"2025-10-01","rent":1191.878332},{"period":"2025-11-01","rent":1204.362594},{"period":"2025-12-01","rent":1204.020464},{"period":"2026-01-01","rent":1209.53275},{"period":"2026-02-01","rent":1220.498213},{"period":"2026-03-01","rent":1230.885226},{"period":"2026-04-01","rent":1216.277961},{"period":"2026-05-01","rent":1217.570561},{"period":"2026-06-01","rent":1216.480952}],"historySummary":{"pointCount":88,"firstPeriod":"2019-01-01","latestPeriod":"2026-06-01","coverageMonths":90,"coverageRatio":0.9777777777777777,"changes":{"1":{"years":1,"startPeriod":"2025-06-01","endPeriod":"2026-06-01","startRent":1191.788613,"endRent":1216.480952,"change":0.020718723715478227,"cagr":0.020718723715478227},"3":{"years":3,"startPeriod":"2023-06-01","endPeriod":"2026-06-01","startRent":1109.1778,"endRent":1216.480952,"change":0.0967411644913918,"cagr":0.03125970374682496},"5":{"years":5,"startPeriod":"2021-06-01","endPeriod":"2026-06-01","startRent":947.020875,"endRent":1216.480952,"change":0.2845344639314311,"cagr":0.05135443768756254}},"maxDrawdown":-0.07496168456423025,"annualizedVolatility":0.04734771421399579,"consecutiveReturnCount":85}}