How the Cuyahoga County competition risk score is built โ sources, formulas, and limitations.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
| Factor | Default | Affordability first | Investor-aware | Speed of competition |
|---|---|---|---|---|
| Corp. / LLC ownership % | 25 | 12 | 40 | 17 |
| Median days on market | 12 | 9 | 11 | 22 |
| Sale-to-list ratio | 11 | 9 | 11 | 17 |
| % sold above list | 11 | 10 | 11 | 17 |
| Price-to-income ratio | 30 | 50 | 17 | 11 |
| Months of supply | 11 | 10 | 10 | 16 |
| Raw total | 100 | 100 | 100 | 100 |
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).
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.
data/cuyahoga_methodology.md and can be run in under 10 minutes from a normal network environment.
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.
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.
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.
| 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 |
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 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%.
| Assumption | Value | Source |
|---|---|---|
| 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. |
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.
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.
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.