Markets Methodology

Two scores, no black box.

Both rankings are built entirely from public data, and both formulas are published here in full: the City Market Score (13 measured factors across three categories) and the Rental Investor ZIP Score (four categories with an exact final formula). They are separate systems on different geographies; their numbers are not interchangeable. Pick a model:

City Market Score13 measured factors → Cash Flow × Growth × Stability. 1,863 ranked U.S. cities (of 2,290 tracked). Rental Investor ZIP ScoreFour categories → 0–100 + A–F grade. ~20,000 ZIP Codes (ZCTAs).

City Market Score: the three categories and the Overall

Each factor is converted to a national percentile rank across the 1863 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.

The financing screen (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 is a break-even calculation, not part of the score. The table's live cash-on-cash column uses the same idea with assumptions you control (rate, term, down payment, closing, rehab, insurance, management, maintenance, capex, vacancy) applied to either the typical or the investor-entry price. At today's rates a 75% LTV financed rental does not clear DSCR in the large majority of U.S. cities; adjust the inputs to see what changes. 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 (high and medium coverage) cities count.

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), a newer release than the city model's ACS 2019–2023, so the same measure can legitimately differ between a city page and a ZIP page inside it (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–2024 (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,250 of 33,791 ZCTAs qualify for the subscores; ~19,970 also receive the overall score (a few lack a whole computable category and keep only the subscores).

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-v1z3-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 ~19,971 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 (1,863 ranked of 2,290 tracked)ZIP Code area / ZCTA (~20,000 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 2019–2023/PEP/BPS, BLS LAUS, Redfin, FBI CDECensus ACS 2020–2024 + Census PEP county (no vendor)
Census ACS vintageDifferent releases: expect disagreement. The city model runs on the ACS 2019–2023 5-year release; the ZIP model runs on ACS 2020–2024. A city figure and a ZIP figure for the same measure (e.g. median home value) can legitimately differ by a full ACS vintage. This is not a join error or a rounding artifact: the two products read different survey releases, by design, until a future unit re-aligns them (which would independently change every city score and needs its own churn analysis).
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 2,222 of 2,290 eligible cities (97% 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.