Methodology

How the Cuyahoga County competition risk score is built โ€” sources, formulas, and limitations.

What the score measures

The competition risk score (0โ€“100) estimates how difficult it is for a regular financed buyer โ€” using a mortgage, needing inspection contingencies, and competing on offer price โ€” to successfully purchase a single-family home in a given ZIP code. A higher score means more competition from institutional and cash buyers, faster-moving markets, and less affordability headroom.

Six market signals are combined using a weighted average. Each signal is normalized to [0, 1] before weighting so all factors contribute on the same scale. When a factor is unavailable for a ZIP, its weight is redistributed proportionally among the remaining factors, keeping the score meaningful as long as at least 50% of the total weight is covered.

The six factors

Factor 1 โ€” Corporate / LLC Ownership %

Fiscal Officer data   Weight: 22%

Share of residential parcels (single-family, 2โ€“4 family, condo) whose deeded owner name matches a corporate/LLC regex: LLC, INC, CORP, HOLDINGS, REALTY, PROPERTIES, VENTURES, INVESTMENTS, CAPITAL, EQUITY, FUND, PARTNERS, LP, LLP, REIT. Government and land-bank owners are excluded from both numerator and denominator.

Source: Values carried from the prior published dataset, which used Cuyahoga County Fiscal Officer parcel data via ArcGIS. For methodology and recomputation instructions, see data/cuyahoga_methodology.md.

Normalization: 5% โ†’ risk = 0; 40% โ†’ risk = 1.

Factor 2 โ€” Median Days on Market

Real data   Weight: 12%

Rolling 90-day median days-on-market for homes sold, sourced from Redfin's ZIP-level market tracker (MEDIAN_DOM column). Fewer days = hotter market = higher risk.

Normalization: 60 days โ†’ risk = 0; 5 days โ†’ risk = 1.

Factor 3 โ€” Sale-to-List Ratio

Real data   Weight: 12%

Average ratio of final sale price to original list price for homes sold in the rolling 90-day window (AVG_SALE_TO_LIST). A ratio above 1.0 means homes sold above list price, indicating bidding-war conditions.

Normalization: 0.95 โ†’ risk = 0; 1.05 โ†’ risk = 1.

Factor 4 โ€” % Sold Above List

Real data   Weight: 12%

Share of homes that closed at a price above their list price in the rolling 90-day window (SOLD_ABOVE_LIST, stored as a fraction in the Redfin file, converted to percent). A high share signals persistent bidding-war activity.

Normalization: 0% โ†’ risk = 0; 60% โ†’ risk = 1.

Factor 5 โ€” Price-to-Income Ratio

Workaround sources   Weight: 30%

Redfin median sale price divided by ACS median household income. Higher ratios mean homes are less affordable relative to local incomes, which concentrates demand among cash buyers and high-income earners.

Home value: Redfin MEDIAN_SALE_PRICE (All Residential, 90-day rolling window ending March 2026). Zillow ZHVI was the intended source but was inaccessible.

Income: ACS 5-year 2012โ€“2016 (2016 inflation-adjusted dollars), from the public GitHub repository Ro-Data/Ro-Census-Summaries-By-Zipcode. The Census ACS API was inaccessible. The 2016 income data inflates ratios by roughly 20โ€“30% compared to 2022 ACS values โ€” use this factor for relative comparisons between ZIPs only, not as an absolute affordability measure.

Normalization: 2ร— โ†’ risk = 0; 8ร— โ†’ risk = 1. ZIPs with extremely low 2016 incomes in mixed commercial areas (e.g., 44114 Downtown, 44115 Midtown) produce outlier PTI values above 10ร— due to the income vintage mismatch.

Factor 6 โ€” Months of Supply

Derived from real data   Weight: 12%

Estimated months of housing inventory. Redfin no longer publishes this directly at ZIP level, so it is derived as: INVENTORY รท (HOMES_SOLD รท 3), where HOMES_SOLD covers a 90-day window (dividing by 3 gives a monthly sales rate). Below 3 months indicates a seller's market; above 6 months indicates a buyer's market.

Normalization: 8 months โ†’ risk = 0; 1 month โ†’ risk = 1.

Default preset โ€” weights and normalization anchors

These are the Default preset weights โ€” a balanced starting point. Users can switch to any of the four presets or customize sliders directly on the map page. See the "Adjustable weights" section below for the full preset table.

Factor Weight Risk = 0 (low) Risk = 1 (high) Status
Corporate / LLC ownership % 22% โ‰ค 5% โ‰ฅ 40% Fiscal Officer
Median days on market 12% โ‰ฅ 60 days โ‰ค 5 days Redfin real
Sale-to-list ratio 12% โ‰ค 0.95 โ‰ฅ 1.05 Redfin real
% sold above list 12% 0% โ‰ฅ 60% Redfin real
Price-to-income ratio 30% โ‰ค 2ร— โ‰ฅ 8ร— Proxy sources
Months of supply 12% โ‰ฅ 8 months โ‰ค 1 month Derived/Redfin

All factors currently available for all 51 Cuyahoga ZCTAs (100% weight coverage). Weights renormalize automatically when any factor is missing so the score always reflects the coverage fraction.

Composite score formula

Each factor value is first normalized to [0, 1] using the anchors in the table above:

norm(v, lo, hi) = clamp((v โˆ’ lo) / (hi โˆ’ lo), 0, 1)

Then the weighted average is computed over factors with available data:

score = round( ฮฃ (norm_i ร— w_i) / ฮฃ w_i ร— 100 )

ZIPs where the sum of available factor weights is below 0.50 (50%) are flagged as having insufficient data and are not scored.

Adjustable weights

The score is a weighted average of the six factors. The map page exposes four preset configurations and a custom slider panel so users can tune the score to their situation. Changing weights does not change the underlying data โ€” only how the six factors are combined.

Weights are entered as integers (raw slider values). At compute time they are divided by their sum, so they automatically normalize to 100% regardless of what values are set. This means users can drag sliders freely without factors fighting each other.

The four presets

Factor Default Affordability first Investor-aware Speed of competition
Corp. / LLC ownership % 25124017
Median days on market 1291122
Sale-to-list ratio 1191117
% sold above list 11101117
Price-to-income ratio 30501711
Months of supply 11101016
Raw total 100100 100100

When to use each preset

Custom weights

The "Customize weights" panel on the map page exposes one slider per factor. Drag any slider from 0 to 100 โ€” the normalized share bar underneath each slider shows what percentage of the total that factor currently represents. The score auto-updates live as you drag. Custom settings persist across page loads via localStorage (key: firstdibs.weights.v1).

ZIP universe

51 Cuyahoga County ZCTAs โ€” sourced from scpike/us-state-county-zip on GitHub (based on US Census 2000 ZCTA geography). The authoritative 2020 Census ZCTA-to-county relationship file (tab20_zcta520_county20_natl.txt) was inaccessible during data collection.

Boundary ZIPs that straddle county lines (e.g., 44022 Chagrin Falls, 44040 Gates Mills) may have changed county assignments since the 2000 Census; treat these as approximate. The 51 ZIPs are consistent with the known Cuyahoga ZCTA list.

Known limitations

Help you can apply for

The Help you can apply for sidebar card shows programs that may help cover your down payment or improve your loan terms. Programs are drawn from data/cuyahoga_assistance_programs.json, which was populated from publicly available program guides and annual reports.

FHA numbers (ZIP-specific)

The FHA Originations and FHA Denial Rate rows display data sourced from the FFIEC Home Mortgage Disclosure Act (HMDA) LAR file (2023 vintage). These figures reflect actual lending activity for the selected ZIP code, so they vary by ZIP.

Other programs (county-wide or statewide)

All other programs โ€” VA, OHFA, FHLB Welcome Home, Cuyahoga DPA, Cleveland HOME, Land Bank, and Habitat for Humanity โ€” are listed as eligibility catalogs. They do not show ZIP-level activity because reliable address-level records were not publicly available at collection time.

Data sources

Factor Source Vintage
Corporate ownership % Cuyahoga County Fiscal Officer parcel data (ArcGIS) Prior published dataset
DOM, sale-to-list, % above ask, months of supply Redfin Data Center โ€” ZIP Code Market Tracker Rolling 90 days ending 2026-03-31
Home value (PTI numerator) Redfin MEDIAN_SALE_PRICE (All Residential) 2026-03-31
Median household income (PTI denominator) ACS 5-year via Ro-Data/Ro-Census-Summaries-By-Zipcode 2012โ€“2016 (2016 $)
ZIP geography scpike/us-state-county-zip (Census 2000 ZCTA) Downloaded 2026-04-30
ZIP boundaries (GeoJSON) data/cuyahoga_zip_boundaries.json Census TIGER 2023

Affordability calculator

The Can I afford here? calculator takes five inputs โ€” annual income, cash saved, monthly debts, credit score range, and preferred loan type โ€” and estimates the maximum home price a buyer could qualify for under FHA and/or conventional financing. All math is client-side; no data is sent anywhere.

This is an estimate, not a pre-approval. Lenders consider your full credit history, employment history, assets, and the specific property. Use this number as a rough starting point, then talk to a lender or a free HUD-approved counselor for an actual figure.

FHA vs conventional โ€” what's different

FHA loans are backed by the Federal Housing Administration and accept lower credit scores (580+ for 3.5% down, 500โ€“579 for 10% down). They require Mortgage Insurance Premiums (MIP): an upfront fee of 1.75% of the loan rolled into the balance, plus an annual fee of 0.55% of the remaining loan divided by 12 and added to each monthly payment.

Conventional loans are not government-backed. They typically require a 620+ credit score. First-time buyer programs (Fannie Mae HomeReady, Freddie Mac Home Possible) allow 3% down. Private Mortgage Insurance (PMI) applies when the down payment is under 20%; the calculator uses a mid-credit estimate of 0.50% annually. PMI can be removed once equity reaches 20%.

Assumptions used in the calculator

AssumptionValueSource
FHA interest rate 7.00% APR Freddie Mac Primary Mortgage Market Survey (PMMS), week ending 2025-04-24. freddiemac.com/pmms โ€” update quarterly in the ASSUMPTIONS constant in index.html.
Conventional interest rate 6.80% APR Same PMMS source; conventional typically prices slightly below FHA.
Loan term 30 years fixed Standard industry default.
Property tax rate 2.10% effective Cuyahoga County effective residential tax rate โ€” Cuyahoga County Fiscal Officer tax-distribution report. Applied uniformly; individual ZIPs may vary.
Homeowners insurance $1,400/yr (~$117/mo) Typical Cuyahoga County premium based on industry survey data. Individual premiums vary by home age, location, and coverage level.
FHA upfront MIP 1.75% of loan amount HUD Mortgagee Letter 2023-18 (current as of 2025).
FHA annual MIP 0.55% of loan balance HUD ML 2023-18 โ€” rate for 30-year loans with LTV >95% and base loan โ‰ค$726,200.
FHA back-end DTI cap 43% FHA technically allows up to 50% with compensating factors. The calculator uses 43% as a conservative, broadly applicable default to avoid overestimating what most buyers can qualify for without additional documentation.
Conventional minimum down 3% Fannie Mae HomeReady / Freddie Mac Home Possible first-time buyer programs.
Conventional PMI rate 0.50% annual Industry mid-credit estimate for 95%โ€“97% LTV. Actual PMI varies by lender, credit score, and LTV.
Conventional back-end DTI cap 45% Fannie Mae DU standard maximum (may vary with compensating factors).
Estimated closing costs 3% of purchase price Typical buyer-side closing costs (loan origination, title, escrow, prepaids). Actual costs vary by lender and loan amount.

How the maximum price is calculated

The calculator solves for the home price P two ways and takes the lower.

1. Income constraint (back-end DTI): Max monthly housing payment = (annual income รท 12) ร— DTI cap โˆ’ existing monthly debts. The monthly payment includes principal & interest, property taxes, homeowners insurance, and MIP or PMI. The equation is linear in P and solved exactly โ€” no iteration needed.

2. Cash constraint: Available cash must cover (minimum down payment % + 3% closing costs) ร— price. Max price from cash = available cash รท (down % + 3%).

The calculator reports which constraint bound the result ("Reason for the cap"). The result is rounded down to the nearest $1,000.

ZIP affordability buckets

Each ZIP is classified against the FHA maximum price (or conventional if FHA is not selected) using the Redfin median sale price as the home-value proxy:

The "Both" map view layers affordability bucket fills (green = affordable, light green = stretch, gray = out of reach) over risk-level stroke colors so counselors can see competition and fit simultaneously.

Updating assumptions when rates change

All assumptions live in a single ASSUMPTIONS constant at the top of the <script> block in index.html. Update fha_rate_apr and conv_rate_apr each quarter using the most recent Freddie Mac PMMS 30-year fixed rate. Note the update date in a comment next to the value.