Markets Methodology

Two scores and one financial screen, no black box.

The City Market Score measures broad market fundamentals, the Buy & Hold screen tests financed holdability under one named scenario, and the Rental Investor ZIP Score measures a separate ZIP-level universe. Their numbers answer different questions and are not interchangeable.

City Market Score13 measured factors → Cash Flow × Growth × Stability. 4,812 ranked U.S. cities (of 5,233 tracked). Buy & Hold screenPrice + rent + financing + operating costs → a conditional pass, thin margin, fail, or insufficient-data result. Rental Investor ZIP ScoreFour categories → 0–100 + A–F grade. 20,132 of 33,659 ZIP Codes (ZCTAs).

City Market Score: the three categories and the Overall

Each factor is converted to a national percentile rank across the 4812 ranked cities (Hazen ranking, ties averaged; inverted factors flipped so higher is always better). Within a category the factor percentiles are combined by their weights into a 0–100 category score. The three category scores combine into the Overall by a weighted geometric mean, which rewards balance and penalizes a market that is weak in any one category:

Cash Flow, Growth, Stability = weighted mean of factor percentiles in each category (0–100)
Overall = CashFlow0.35 × Growth0.35 × Stability0.30

The exponents are the category weights: Cash Flow 35%, Growth 35%, Stability 30%. A market has to be at least decent everywhere to score well overall; being excellent in one category cannot fully rescue a weak one.

The thirteen factors and their weights

Weights are out of 100 and sum to the category totals above. Cash Flow uses an expense-adjusted yield (gross yield net of a modeled vacancy, property-tax, capex, and management allowance), not raw gross yield. "Inverted" means lower raw values score better (cheaper, safer, less oversupplied).

FactorWeight (of 100)
Cash Flow & Affordability: 35% of Overall
Expense-adjusted gross yield22
Price-to-income (inverted)13
Durable Growth: 35% of Overall
Population growth12
Job growth12
Income growth5
Rent growth4
Home-value growth2
Stability & Rental Demand: 30% of Overall
Violent crime (inverted)10
Property crime (inverted)3
Rental vacancy (inverted)7
Unemployment (inverted)4
Property-tax burden (inverted)4
Months of supply (inverted)2

One honesty note baked into the labels: the "tax + insurance burden" factor is wired to property tax only: a public insurance figure at city level is not available, so we do not pretend to score it.

Grades and the category gate

The letter grade is a band of the Overall percentile: A at the 80th percentile and up, B at 60, C at 40, D at 20, F below. Two guards keep a lopsided market out of the top:

Missing data: what ranks, what is imputed, what is dropped

Three inputs are core: the gross-yield pair (price and rent), population trend, and employment trend. A market missing any core input is not ranked; it stays searchable, but we never score around a hole in the foundation.

A non-core factor that is missing is imputed only when a tight, credible reference group exists (same county, or same state and population band) with at least 5 members and low internal dispersion. Otherwise the factor is dropped, and its category re-weights across the factors that remain in that category only: never a silent benefit, never borrowed from another category. A market must have at least 60% of the thirteen factors present (measured or credibly imputed) to rank at all. Every imputation and every drop lowers a market's confidence score.

Every factor is winsorized at the 1st/99th percentile before ranking, so one extreme value cannot distort the national distribution. Population and job growth are capped for diminishing returns (4.5% and 4.0% per year), so a genuine boomtown does not run away with the Growth category.

Prices, rents, and the investor-entry number

Typical value and rent. Typical home value is Zillow ZHVI (all-homes, mid-tier, smoothed and seasonally adjusted). Rent is Zillow ZORI (all-homes typical asking rent) where Zillow covers the city, and Census ACS median gross rent otherwise; the ACS fallback is labeled everywhere it is used, because the two are not directly comparable.

Investor-entry price. Alongside the typical value we show a Zillow Bottom-Tier ZHVI (the 5th-to-35th percentile of the local home-value distribution) as a proxy for the entry-level home an investor actually buys. It is joined to the typical-value record by Zillow's stable RegionID, not by name. Where a place name is duplicated and the identity cannot be resolved unambiguously, the investor-entry price is left N/A rather than risk a wrong match.

Both 1% rules. The 1% rule asks whether monthly rent is at least 1% of price. We show it two ways: typical 1% = rent ÷ typical value, and investor-entry 1% = rent ÷ bottom-tier price. One caveat we state plainly: ZORI is a typical all-homes rent, not a bottom-tier rent, so investor-entry 1% pairs a bottom-tier price with a typical rent. It is a useful estimate and it tends to overstate the true entry-level ratio: treat it as directional, not a quote.

Buy & Hold screen: financed holdability

Scenario version: buy-hold-v1-2026-09-19. This is a separate calculation from the Overall City Market Score. Every published city remains visible and receives one of five states: meets the screen at 20% down, meets it at 25% down, thin margin, does not meet the screen, or insufficient data.

30-year fixed loan at 7% · 20% and 25% down · 3% closing costs
5% vacancy · 8% management on collected rent · 5% maintenance + 5% CapEx on scheduled rent
measured local property tax · insurance allowance = 0.5% of purchase price annually
NOI = collected rent − property tax − insurance − management − maintenance
Hold Coverage = (NOI − CapEx reserve) ÷ annual debt service
Financial pass = cash flow > 0 AND Hold Coverage ≥ 1.10 AND cash flow at rent −10% ≥ 0

A city enters the shortlist only if that financial test passes and the existing category-quality and data-quality gates also pass. Full-precision values determine the result; the interface rounds only after qualification. Missing price, rent, tax, or score data produces insufficient data, never a zero cost.

Current-data diagnostic. The baseline produces 211 modeled candidates at 25% down; 166 also clear the screen at 20% down. Raising only the annual insurance allowance to 1.0% leaves 155; at 1.5% it leaves 106. These are sensitivities, not premium estimates. None of the current Overall top ten clears the complete baseline screen.

FieldEvidence recordHow the screen treats it
Investor-entry priceZillow Bottom-Tier ZHVI; city; latest monthly observation in the generated dataset; publisher-modeled index.Required. Missing stays missing. Context for screening; it does not change the Overall score.
Modeled rentZORI asking rent where covered; otherwise ACS survey gross rent. City; monthly or ACS 5-year vintage; measured/model-derived as labeled.Required. Source is disclosed. It is not bedroom- or property-matched.
Property taxCensus ACS real-estate tax/value estimate; city; ACS 2020–2024 5-year survey.Required and must be measured rather than imputed.
InsuranceNo city premium dataset is claimed. The 0.5% annual figure is an assumption; 1.0% and 1.5% are named sensitivities.Always labeled as an allowance. An actual landlord quote is required before a property decision.

Version history, 19 September 2026. buy-hold-v1-2026-09-19 introduced the shared screen across the map, city briefing, comparison handoff, and underwriting links. Overall ranks did not change. Saved local research records the scenario version so a later model update can be identified rather than silently treated as a market change.

The adjustable explorer financing column (arithmetic, not a score)

NOI_yield = gross_yield × (1 − vacancy) − tax_rate − capex − management
capex = 0.005 + 0.012 × clamp( (year − year_built − 15) ÷ 70, 0, 1 )
ProxyDSCR = NOI_yield ÷ ( LTV × mortgage_constant × 12 )
PASS if ProxyDSCR ≥ threshold (default 1.00)

This legacy explorer column is an adjustable break-even calculation, not the versioned Buy & Hold shortlist above and not part of the score. The table's live cash-on-cash column uses assumptions you control and applies them to either the typical or investor-entry price. Its DSCR is NOI-based; Hold Coverage after CapEx is shown separately on the standardized screen. An estimate, never a quote.

The extreme-yield flag (a data limit)

Z = 0.6745 × ( gross_yield − median ) ÷ MAD, flag if Z > 3.5

A few cities show a gross yield so far above the national median that public data cannot verify it is achievable net after collections, condition, capex, and liquidity. We flag those and keep them fully listed and searchable. This is a data limitation, not a judgment about the market.

Every source, named

All sources are free and keyless. We do not create synthetic city values or use AI to fill missing observations. Some publisher indices, including Zillow ZHVI, are themselves model-derived, and are labeled.

What this model cannot see

State and region scores

A state or region score shows the distribution of its cities' Overall scores (a median with the middle range) rather than one number that would quietly mean its biggest metros. Regions are the nine U.S. Census Bureau divisions. Only ranked cities count in the median.

A state receives a public ordinal headline rank only with at least 20 evaluable cities across at least 10 distinct county contexts. States below either threshold remain searchable and show their median, evaluated-city count, county-context count, and Buy & Hold pass count/share, with an explicit insufficient-coverage label. The state index separately ranks eligible states by median city fundamentals, modeled pass rate, and number of qualifying markets because those answer different questions.

Rental Investor ZIP Score: the exact model

Model version: z3-measured-v1 (supersedes z15-rental-investor-zip-v1). The ZIP Code explorer is a distinct product on a different geography. Its unit is the U.S. Census ZIP Code Tabulation Area (ZCTA), which approximates USPS ZIP delivery geography, not the exact carrier routes. There is no listing, parcel, school, MLS, Homes.com, or scraped data anywhere in this model. Government figures are U.S. Census ACS 2020–2024 5-year survey estimates (with margins of error), the same release the city model reads; a city page and a ZIP page inside it can still differ because the geographies differ (see “Census ACS vintage” in the comparison table below). Since 30 August 2026 the model also uses measured market data from Zillow's public research files (described in full under Measured market data below) alongside clearly-labeled county/place context.

The category formula. Each eligible ZIP Code's score R is a weighted average of four category scores (each 0–100):

R = 0.25 · CFA + 0.30 · DMQ + 0.25 · SMG + 0.20 · STR

Each category is the equal-weight mean of its factors' national percentile scores. Every factor is direction-adjusted first, so a higher percentile is always better regardless of the raw direction shown.

1 · Cash Flow & Affordability (CFA): 25% · direct ZIP/ZCTA data. Equal-weight mean of four percentiles: survey gross-rent yield (higher is better), price-to-income (lower is better), estimated property-tax burden (lower is better), median gross rent as a % of income (lower is better). With all four present, each is 6.25% of the unpenalized overall.

2 · Local Demand & Market Quality (DMQ): 30% · direct ZIP/ZCTA data. Equal-weight mean of five percentiles: population scale, log-transformed (higher is better); renter-household depth, log-transformed (higher is better); renter share (higher is better); rental vacancy (lower is better); and Zillow market heat index (higher is better), a measured demand observation covering 99.4% of scored ZIP Codes. With all five present, each is 6%.

3 · Surrounding-Market Growth (SMG): 25% · explicitly-labeled context, never a ZIP-level measurement. Equal-weight mean of two percentiles: county Census PEP population growth, 2020–2025 (higher is better), and the surrounding place/county city-model Growth score (higher is better). With both present, each is 12.5%.

4 · Stability & Risk (STR): 20% · a ZIP + context mix. Equal-weight mean of: ZIP median year built (newer/higher is better); the surrounding place/county Stability score (labeled context, higher is better); ACS data confidence (higher is better); and ZIP recently-built share (higher is better). With all four present, each is 5%.

About 70% of the full-data weight is directly-observed ZIP/ZCTA evidence; about 30% is labeled place/county context (all of SMG plus one STR factor). Context factors use broader geography honestly and are never presented as ZIP-level observations.

How each factor becomes a percentile. Each raw factor is direction-adjusted, winsorized at the 5th and 95th percentiles (so one extreme value cannot distort the distribution), then converted to a national 0–100 percentile across scored ZIP Codes. Ties share the same percentile position.

Missing data is never imputed. A missing factor is excluded, and the factors that remain in its category are equally re-weighted among themselves: never borrowed from another category, never a silent zero. If an entire category is unavailable, the ZIP Code is not given an overall score (it keeps its component subscores and stays searchable).

Eligibility. A ZIP Code is scored only with ACS coverage, population ≥ 500, the survey-yield inputs present, and acceptable value/rent margins of error; the population minimum is in addition to those source/coverage/MOE gates. 20,132 of 33,659 ZCTAs currently clear every one of those gates and receive both component subscores and the overall score; the rest stay searchable and say which gate they missed.

The balance penalty. Let m = min(CFA, DMQ, SMG, STR). If m ≥ 30, the final score is R. If m < 30:

Final Score = R × ( 0.5 + 0.5 · m / 30 )

This prevents strength in one category from completely masking a severely weak category.

Grades are distribution-relative, with cutoffs computed from the current scored-ZIP universe, not fixed raw-score boundaries: A at/above the 90th-percentile score cutoff; B 70th to below the 90th; C 40th to below the 70th; D 15th to below the 40th; F below the 15th.

Ranks. National and within-state ranks sort the final score descending; equal final scores share the same minimum rank. ZIP ranks and city ranks are separate: a ZIP 80 and a city 80 are not directly comparable. The score is a screening tool, not a return forecast.

Affordable, higher-yield markets are allowed to rank well. A low price and a strong rent-to-price ratio are legitimate advantages, so the score's relationship to home value is expected to be roughly neutral-to-negative: we do not penalize a market for being inexpensive. Cheapness only costs a market when it comes with weak rental demand, thin liquidity, high vacancy, unreliable survey data, or a declining surrounding county, which is why the top of the list is sizeable, low-vacancy, growing secondary and suburban markets, not the tiniest highest-yield rural ZIP Codes.

Why this model (and two we rejected). Z10 tried to reuse the city Growth category, but ZIP growth from overlapping ACS 5-year windows is statistically indistinguishable from noise. Z14 built a growth-free ZIP-only score that collapsed into "cheapest tiny town wins." The current model survived a deterministic search over tens of thousands of transparent configurations, chosen because it adds real ZIP demand/liquidity/vacancy plus a valid, non-overlapping surrounding-growth signal (annual county population estimates) so raw cheapness alone cannot dominate.

Measured market data (Zillow): what is used, and what is deliberately not. On 30 August 2026 the site owner authorised the use and display of Zillow's public research data, conditional on clear per-page attribution to Zillow. This is an owner risk decision on an ambiguous term, not confirmed permission. Zillow's public-data page says the files are "free for public use by consumers, media, analysts, academics and policymakers, consistent with our published Terms of Use" and that "proper and clear attribution of all data to Zillow is required" (an enumerated list that does not name a commercial site). The binding corporate Terms of Use it defers to is disallowed by Zillow's own robots.txt and was therefore not read, and no legal review was performed. We describe this honestly rather than calling it licensed or cleared. Redfin and Realtor.com data remain excluded.

The 90% substitution rule. A measured series may replace or join a national scoring input only if it covers at least 90% of the scored ZIP universe. Below that threshold it would rank ZIP Codes against each other on different input bases, which we will not do. Measured coverage of the scored universe, as at the 2026-07 observation month: Zillow market heat 99.4%, ZHVI top tier 97.1%, ZHVI mid tier 96.6%, 3-year value growth 95.9%, ZHVI bottom tier 94.1%, all above the line. Below it: for-sale inventory 87.4%, median list price 61.8%, and ZORI asking rent just 40.9%.

What measured data changes in the score. Two things, and only where a measured value actually exists. (1) Zillow market heat joins the Local Demand category as a fifth factor. (2) The Zillow Home Value Index substitutes for the ACS owner-reported value in the two ratios that take a home value as an input: price-to-income and the property-tax-burden denominator. Where no measured value exists (about 3.4% of scored ZIP Codes), the stored ACS metric is used unchanged and the ZIP is flagged. The category weights did not change. Nothing was re-tuned; the frozen weights above carry over exactly.

Nothing is imputed, ever. A ZIP Code either has a measured observation or it does not. No measured value is inherited from a county, a neighbouring ZIP Code, or a state average. A missing measured factor is dropped and its category re-weights over the factors that remain, the same rule the survey factors follow. A ZIP Code missing a measured national factor is additionally flagged and capped at grade B, because a ZIP scored on fewer inputs is not directly comparable to one scored on all of them.

Why ZORI is not in the score. Zillow's asking-rent index covers 40.9% of scored ZIP Codes. Putting it in the national score would rank the other 59% on a different basis, so it is confined to a separate measured-cohort score computed only among the ZIP Codes Zillow measures rent for (currently about 4,800 of them). A cohort percentile answers "how does this compare to the ZIP Codes Zillow measures rent for", not "how does this compare to the country", and it is never blended into the overall score or presented as a national rank.

Measured rent and survey rent are different quantities. ACS median gross rent is what sitting tenants pay including utilities, top-coded at $3,501; ZORI indexes asking rent on newly listed units, uncapped. Across the ZIP Codes with both, they correlate 0.83 by rank but only 0.57 by level: they order markets similarly and disagree on the number. Neither corrects the other, and both are shown separately labelled. By contrast ZHVI and the ACS median value correlate 0.96, which is the evidence that justified substituting the measured value into the ratios above.

The separate measured-growth signal. Measured 3-year home-value growth covers 95.9% and clears the threshold, but it is published as its own labelled national signal beside the score, not inside it. An earlier version of this model averaged it into the Surrounding-Market Growth category and moved 41.2% of all grades. That version was rejected: the two existing context factors in that category correlate +0.74 with each other but −0.20 with measured value growth, so averaging them did not refine the category, it destroyed its meaning, and most of the movement came from the balance penalty releasing rather than from any real re-measurement. Giving measured growth its own weighted category was rejected too, because inventing a weight to make room for a factor is tuning. The shipped design moves 13.5% of grades, with a median absolute national rank movement of 479 places.

Grade cutoffs were recalculated, population shares were not. Grades are percentile bands, so the share of ZIP Codes in each grade is preserved by construction while the cutoff values move with the distribution: A 64.8 → 63.7, B 55.2 → 54.7, C 41.9 → 42.4, D 27.3 → 28.1. Scores recorded before this change are not a continuous series with scores recorded after it; a grade that moved may reflect the change of measurement basis rather than a change in the market.

USPS ZIP is not a Census ZCTA. Zillow keys its files on USPS ZIP codes; this product's unit is the 2020 Census ZCTA. They are related but different universes: PO-box-only, single-organisation and zero-population ZIP codes have no ZCTA at all. Every measured value is matched to a ZCTA by code and reconciled, with every unmatched row reported rather than silently dropped. Matching by code is not a claim that the two areas are identical.

Monthly, not live. Zillow publishes these files monthly and revises recent months. Every measured figure on a profile carries its observation month. Nothing here is real-time, and we do not describe it as live.

The two component signals remain on each profile: an Affordability signal (survey yield + inverse tax burden) and Rental-market context (renter share + inverse vacancy), two independent national percentiles; a ZIP can lead on one and trail the other.

ZIP model changelog

30 August 2026: z15-rental-investor-zip-v1 → z3-measured-v1. If a ZIP Code you follow changed grade or rank this month, this is why.

What was added. Measured market data from Zillow's public research files, at the 2026-07 observation month. Two things entered the score: the Zillow market heat index as a fifth Local Demand factor (covering 99.4% of scored ZIP Codes), and the Zillow Home Value Index replacing the ACS owner-reported value inside price-to-income and the property-tax-burden ratio, wherever a measured value exists. Profiles additionally show measured value and rent levels, tier and bedroom breakdowns, inventory, days to pending, price-cut share, and measured growth rates, as context beside the score, with the observation month on every figure.

What did NOT change. The category weights are unchanged (25/30/25/20). No factor was re-tuned. Eligibility, the population floor, the balance penalty and the ZIP/city separation are all as before.

Grade cutoffs moved; grade shares did not. Grades are percentile bands, so the same proportion of ZIP Codes earns each grade while the numeric cutoff shifts with the distribution: A 64.8 → 63.7, B 55.2 → 54.7, C 41.9 → 42.4, D 27.3 → 28.1.

How much moved. 13.5% of scored ZIP Codes changed grade. The median absolute national rank movement was 479 places out of 20,132 scored. Movement is concentrated where a measured demand or value observation disagreed with what the survey inputs alone implied, which is the point of adding measurement, but it does mean a grade change is not necessarily a market change.

Scores before and after are not directly comparable. This is a change of measurement basis, not just new numbers. Do not chart a ZIP's score across 30 August 2026 as one continuous line, and do not read a difference across that boundary as market movement.

Zillow and ACS figures will disagree, and both are shown. ACS median home value is what owners report in a 5-year survey; the Zillow Home Value Index is a monthly index of typical value; they correlate 0.96. ACS median gross rent is what sitting tenants pay including utilities and is top-coded at $3,501; Zillow's ZORI indexes asking rent on newly listed units and is uncapped; they correlate 0.83 by rank but only 0.57 by level. Neither is a correction of the other, so profiles label both explicitly rather than picking a winner.

Attribution and rights. All measured figures are credited to Zillow on the page that shows them. Use of this data is an owner risk decision taken on 30 August 2026 on an ambiguous term: not confirmed permission, and not legally reviewed. See Measured market data. Redfin and Realtor.com data are not used.

Operationally reversible. A government-only build of this model remains available and reproduces the pre-change figures exactly. It is a rollback path, not the model currently published here.

City Market Score vs. Rental Investor ZIP Score

Two separate systems on different geographies. The models are separate and their numeric scores are not interchangeable: a city 80 and a ZIP 80 mean different things on different universes.

DimensionCity Market ScoreRental Investor ZIP Score
GeographyCity / place (4,812 ranked of 5,233 tracked)ZIP Code area / ZCTA (20,132 scored)
Factors13 factors · 3 categories~13 factors · 4 categories
Aggregationweighted geometric meanweighted arithmetic mean + balance penalty
Grade universeOverall-percentile bands + category gatescore-percentile cutoffs (ZIP universe)
Key sourcesZillow, Census ACS 2020–2024/PEP/BPS, BLS LAUS, Redfin, FBI CDECensus ACS 2020–2024 + Census PEP county (no vendor)
Census ACS vintageSame release. Both models read the ACS 2020–2024 5-year release. A city figure and a ZIP figure for the same measure (e.g. median home value) still differ because a city and a ZIP Code are different geographies, not because of the survey release.
Intended usescreen U.S. citiesscreen ZIP-area rental markets

Market Negotiation Leverage

A labelled context signal: not part of either score above, and never blended into a category or the Overall. It estimates which side of a deal current market conditions favor, city-wide or ZIP-wide, today.

City: an equal-weight mean of three Redfin signals' national percentiles among the 4,768 of 5,233 eligible cities (91% Redfin coverage), each direction-adjusted so a higher percentile always means more buyer leverage: days on market (higher = slower = more leverage), months of supply (higher = more inventory = more leverage), and sale-to-list ratio (lower = closing further under ask = more leverage, so inverted). The three move together in the expected direction (Spearman coherence 0.50–0.66 across the eligible set), comparable to or stronger than this site's own existing bar for combining factors, so a composite is defensible; equal weighting because no evidence supports any other split. A city missing any of the three is excluded entirely rather than partially renormalized.

ZIP: reuses the ZIP model's own already-scored Zillow market-heat percentile (the z3-measured-v1 DMQ factor), inverted, rather than building a second, independently-computed composite: ZIP-level inventory/price-cut coverage (40–63%) is far thinner than the city Redfin inputs (97%), so reusing the already-validated, better-covered signal is more defensible than a new parallel one. Price-cut share and active-listing count are shown alongside as supporting evidence when Zillow reports them, never blended into the percentile.

What this is not: a prediction of what any specific seller will accept, or a seasonally-/historically-adjusted read. Both signals are cross-sectional snapshots (how a market compares to every other tracked market today) because no multi-year time series for days-on-market, inventory, or price cuts is committed in this pipeline; building a "fast or slow for this time of year" claim from a single snapshot would manufacture precision the data doesn't support. Full validation record, including a real-market plausibility check and the coherence numbers behind the city composite: Z25 Negotiation Leverage report.

What these scores are

These are conditional rankings of today's measurable conditions, not forecasts. They tell you how a market is positioned right now, not what it will do. Underwrite any specific property with the free calculators, which show every formula the same way this page does.