← Projects  /  01

US Housing Market Pipeline

Housing data from several public sources, landed in a local Postgres warehouse on a weekly schedule, modelled with dbt, and served through FastAPI to the charts below. The affordability view joins Zillow home values against Federal Reserve income and mortgage-rate series to show how the cost of a house has moved relative to what people earn.

Zillow ZHVI · 232k rows FRED API · 9 macro series Weekly refresh via Airflow
US Median Home Value
Price-to-Income Ratio
30yr Mortgage Rate
Home Value Since 2000

Affordability

Affordability

Price-to-Income Ratio

National median home value ÷ median household income · 2000–2024

Loading data…

Home Values

National ZHVI

Zillow Home Value Index · monthly

Loading data…

Macro

Mortgage Rate

30-year fixed · weekly average

Loading data…

Geography

Geography

Home Values by State

Select a state to inspect it. Switch between current value and appreciation since 2000.

Loading map…

Select a state

Median Home Value

Since 2000

Value in 2000

Pipeline Architecture

Ingest

Sources

Zillow ZHVI CSV
FRED REST API
BLS QCEW

Orchestrate

Airflow

Scheduled DAGs
Weekly refresh
Retry on failure

Store

Postgres

5 tables · ~46MB
235k+ raw rows
3 schemas

Transform

dbt Core

Staging views
Mart tables
Affordability models

Serve

FastAPI

JSON endpoints
Cloudflare tunnel
CORS enabled

Visualise

Chart.js + D3

Live charts
No build step
This page

Notes

The pipeline runs on my own hardware — Airflow, Postgres and dbt live in an LXC container on a Proxmox host, and FastAPI is exposed through a Cloudflare tunnel so this page can read from it without opening a port.

Zillow publishes ZHVI as a wide CSV with one column per month, so the load step unpivots it into a long table before dbt gets involved. FRED is straightforward REST. The affordability mart is where the two meet: home value divided by median household income, aligned on observation date and carried forward where the income series reports less frequently than the home value series.

The state map is D3 over a TopoJSON US atlas, coloured by a quantised scale derived from the same FastAPI endpoint. Both scales recompute when you change the metric.

← All projects The infrastructure →