Data dictionary
Generated at build time from packages/spec/data-dictionary.json (version 1.0, as-of 2026-07-09; page built 2026-07-10). The map app reads the same file — one source of truth, no drift.
Tract metrics
Section titled “Tract metrics”Every tract-level signal on the map. Percentile fields are county-relative, 0–100.
| Key | Fields | Name | Definition |
|---|---|---|---|
flip |
flip_score |
SFH Flip Score | Buy-rehab-sell: resale liquidity (sale-to-list, days-on-market, sold-above-list) + appreciation + value entry. Light tax weight (short hold); penalizes point-of-sale-inspection towns. Low-coverage tracts are damped. |
brrrr |
brrrr_score |
MFH BRRRR Score | Buy-rehab-rent-refi: gross yield + low effective tax (you hold) + capital/halo appreciation for the refi-out. Heavier distress & tax-trap penalty. Low-coverage tracts are damped. |
best |
best_strategy |
Best strategy per area | Teal = flips win here · gold = BRRRR wins · grey = neither scores well. Color intensity = how strong the winner is. |
dealscore |
deal_score_custom |
Deal Score (weighted) | Blend of the components in the sliders, 0–100. Tune weights or pick a profile. |
capital |
cap_pct |
Capital-flow momentum | HMDA mortgage vol + loan size + buyer income 2022→2024. Grey = too few loans. |
yield |
gyield/yield_pct |
Indicative gross yield | Zillow ZORI rent ÷ ZHVI price, by ZIP. A relative screen — high yields in cheap/high-tax areas are often traps. |
tax |
eff_rate |
Effective property tax | 2023 Cook municipal effective rate. Lake / unincorporated not shaded. |
shock |
reass.shock/shock_pct |
Reassessment shock | Median 2-4-flat AV change at the township’s most recent triennial reassessment (Assessor mailed values). South triad is being reassessed NOW (2026) — shaded townships there show fresh 2026 shocks. High shock = next tax bill jumps. |
halo |
halo_pct |
Halo frontier | How much pricier the neighbors are (loan size). High = cheap tract bordering expensive — convergence play. |
income |
inc_pct |
Mortgage applicant income | Median income of home-purchase borrowers (HMDA 2024). |
permits |
mom_pct |
Renovation + business momentum | Chicago permits (18mo) + new licenses (12mo). Grey = no city data (suburbs). |
crime |
crime_yoy |
Crime trend (YoY) | Trailing 12 months vs prior 12, by Chicago community area. Green = crime falling (repricing up before buyers notice). |
heat |
mt_s2l/s2l_pct |
Market heat (sale-to-list) | Redfin avg sale-to-list, latest quarter, by ZIP, county-wide. Hot = seller’s market; cool = buyer leverage. |
biv |
cap_pct x lowtax_pct |
Sweet spot · Capital × Low-tax | X = capital flow →, Y = low tax ↑. Dark corner = high capital + low tax. |
saf |
saf_gap/saf2 |
Section 8 arbitrage (SAFMR − rent) | HUD FY2026 Small Area FMR (2BR voucher ceiling) minus Zillow market rent, by ZIP. Green = the voucher pays MORE than market — guaranteed-rent arbitrage. Most of the county is negative; hunt the green tail. |
crmix |
crmix_pct |
Crime mix (gentrification pains) | Property-crime share + falling violent trend, trailing 12mo by community area. Green = crime is mostly theft/burglary and violence is falling — classic early-upswing texture. Chicago only. |
commd |
commd_pct |
Commercial investment $ | Reported cost of $100k+ renovation permits (18mo), summed per tract. Where institutional/commercial money is renovating. Chicago only. |
pp |
pp_pct |
Paws & Pours index | Specialty coffee, breweries, pet shops/daycare, organic grocers (OpenStreetMap). Disposable-income businesses cluster 12-24mo ahead of price moves. Coverage is OSM-dependent. |
commute |
hq_min |
Commute to major employers | Free-flow drive time ×1.25 rush factor (OSRM) to nearest of: Abbott/AbbVie, Baxter/Walgreens, Discover, the Loop, O’Hare. Renter/buyer demand anchor. |
wib |
wib3y |
Basement flooding (311, 3y) | “Water in basement” 311 complaints, 3 years, per tract. Dark blue = rule out garden/basement units & duplex-downs. Chicago only. |
distress |
distress_pct |
Distress density (motivated sellers) | Vacant-building complaints (1y, ×2) + open building violations per tract. High = motivated sellers & wholesale pricing, but verify block-by-block. Chicago only. |
ride |
ride_tr/ride_pct |
CTA ridership trend | Recent monthly L-station entries (≥2025-04) vs the 2019 pre-COVID baseline, nearest station within ~0.75mi. System-wide is still below 2019, so this ranks which station areas recovered best — real foot-traffic, not hype. Tracts far from the L are grey. |
gov |
gov311/gov311_pct |
311 governance burden | Street-light-out + rat-baiting + sanitation + building-violation 311 calls (last 12mo) per community area; info-only call-center calls excluded. A behavioral read on neighborhood management/decay. Chicago only. |
old |
oldstk/old_pct/old40 |
Old-stock / lead risk | Share of housing units built before 1980 (Census ACS B25034) — a proxy for lead paint, knob-and-tube, porch/masonry, and tenant-safety burden. High = budget more rehab + operating risk. Covers Cook + Lake. |
jobs |
jobs_g/jobs_pct |
Job growth (workplace) | Workplace jobs in-tract 2019→2022 (Census LEHD/LODES, block-level aggregated). Green = jobs growing = daily-spending + rental-demand tailwind. County-wide post-COVID median is slightly negative, so green tracts are genuinely outperforming. |
fha |
fha_sh/fha_pct |
FHA buyer depth | Share of home-purchase mortgages that are FHA (HMDA 2023). Higher = a deeper entry-level financed buyer pool, so renovated entry-level product finds buyers faster. Caveat: FHA appraisals are STRICTER (minimum property standards — paint, handrails, roof life), so budget for FHA repair conditions on exit. A flip exit-liquidity read, not an easier-appraisal read. |
Listing fields
Section titled “Listing fields”Fields on scored listings (/api/listings/{metro}, search_deals).
| Field | Definition |
|---|---|
deal_score |
0-100; max(flip,brrrr) x economics_factor x coverage + motivation kicker. NULL = unscored (no valuation basis) — never a fake 0. |
arv |
After-repair value, model p0a: max(comp approach [tract median x 1.22 or gated live comps], income approach capped at 1.5x tract anchor). NOT an appraisal. |
offer |
max(flip solver: ARV x 0.75 - rehab; BRRRR solver: ARV x LTV - rehab). |
discount_pct |
% below ask the suggested offer sits. Negative = at/above ask. |
ask_vs_model |
ask / tract median price (ZIP-blended screen, not truth). |
motivation |
JSON array: PRE-MARKET, PRICE CUT -X%, remark-derived distress keywords. |
status |
active | gone (unseen in a fully-successful fetch partition). |
first_seen/last_seen |
ISO timestamps from our runs; listed_at falls back to first-seen (true DOM arrives with MLS, P7). |
query_key |
internal: which fetch partition produced the row (stale-marking safety). |
model_version |
engine version that scored the row (rescore refreshes stale rows). |
addr_key |
normalized address+zip for cross-source dedupe. |
source |
redfin | zillow |
Underwrite fields
Section titled “Underwrite fields”Fields on underwrite responses (/api/underwrite, underwrite MCP tool).
| Field | Definition |
|---|---|
arv_source |
‘real comps (N sales, conf C)’ when gated comps clear confidence>=55, else ‘tract heuristic’. |
comp_arv |
base/conservative/aggressive from comp distribution + confidence + best comps. Absent when comps refused (dispersion/similarity/count gates). |
arv_note |
warning when comp ARV detaches >1.75x from tract norm. |
risk |
0-100 + band + flags[] (severity, reason) — scored SEPARATELY from opportunity. |
economics_factor |
0.35-1.0 multiplicative gate; terrible deal math collapses any tract score. |
dscr |
NOI at renovated rents / annual debt service (30yr at input rate). |
unscored/unscored_reason |
present when no valuation basis exists — the honest no-answer. |
Automated valuations are not appraisals; error rates are published on Accuracy.