Skip to main content

CA · City data hub

San Francisco, CA housing methodology

How this city's fixture-backed signals are computed — the formulas, the inputs present for this market, and the limits.

Methodology version v5.0Coverage 100% (14/14 required)

Signal formulas and this city's inputs

Each signal uses a fixed, documented formula. For San Francisco, the cards below show whether the signal was computed and which raw inputs are present or missing — partial coverage is never hidden.

  • Affordability

    89 / 100

    rentBurden = annualGrossRent / medianHouseholdIncome; score = clamp((0.30 − rentBurden) / 0.30 × 100 + 50, 0, 100)

    Higher = relatively more affordable for typical income.

    Required inputs: medianGrossRent, medianHouseholdIncome. All present for this city.

  • Supply

    37 / 100

    intensity = (trailing12Permits / housingUnits) × 1,000; score = clamp(intensity / 0.6, 0, 100)

    Higher = new supply growing relative to existing stock.

    Required inputs: permits, housingUnits. All present for this city.

  • Price momentum

    76 / 100

    score = clamp(50 + hpiYoYChangePct × 5, 0, 100)

    Higher = stronger recent price appreciation. Not a forecast.

    Required inputs: homePriceIndexYoY. All present for this city.

  • Job market

    65 / 100

    level = clamp((8.5 − unemploymentRate) / 6 × 100, 0, 100); trend = clamp((1.0 − Δ12m) / 2 × 100, 0, 100) (missing → 50); score = round(level × 0.7 + trend × 0.3)

    Higher = lower / improving unemployment.

    Required inputs: unemploymentRate. All present for this city.

    Optional refinement: unemploymentRateChange12m — present: unemploymentRateChange12m.

  • Economic strength

    96 / 100

    weighted blend of per-capita income level (0.35), income growth (0.45), and regional GDP growth (0.20; renormalized if missing)

    Higher = higher / growing metro per-capita income. Not investment advice.

    Required inputs: perCapitaPersonalIncome, perCapitaPersonalIncomeGrowthYoY. All present for this city.

    Optional refinement: regionalGdpGrowthYoY — present: regionalGdpGrowthYoY.

  • Climate risk

    98 / 100

    score = round(femaNriRiskIndex) // 0-100, higher = more hazard exposure

    Higher = more FEMA NRI hazard exposure (county-level, not property-level).

    Required inputs: climateRiskIndex. All present for this city.

  • Overall

    53 / 100

    positives = avg of available {affordability, supply, priceMomentum, jobMarket, economicStrength}; overall = clamp(positives − (climateRisk / 100 × 20), 0, 100)

    Higher = better risk-adjusted reading across available signals.

    Derived from the available positive signals above, with a climate-risk penalty.

Limitations

  • Static fixtures

    Values are source-attributed static fixtures bundled with the build — not live data. Provenance is labeled fixture across every metric.

  • Mixed precision

    Inputs land at different geographic levels: city/place (Census ACS), county (FEMA NRI, BLS LAUS), and MSA/CBSA (FHFA HPI, Census BPS, BEA Regional).

  • No property-level claims

    Climate risk and other county/metro values are area-level context. Nothing here predicts risk or value for a specific address or neighborhood.

  • No investment advice

    Computed signals summarize public data. They are not investment, financial, or purchase advice for any individual.

Full methodology

These summaries mirror the platform-wide methodology, which carries the full formulas, weights, confidence model, and the known signal-formula limitations. See this market's sources and data table for the underlying values.

The affordability signal reflects rent relative to income — only part of the real cost of owning. For the recurring and one-time costs beyond a mortgage, see homeownership costs.