Methodology
Groundwork's job is to show what's actually happening. That means being clear about where each number comes from and what it can and can't tell you. Every number on the site links back to its source, and every chart says when its data was last updated.
How the data is organized
Everything charted on Groundwork is an observation: one value, for one place, for one period, from one named source. Each observation records the jurisdiction, the metric (say, typical asking rent), the period it covers, the value, the source, and the date the data was current. Panels are just different windows onto that one table. That's why every chart can offer the same data as a plain HTML table, and why every figure is traceable.
Rents (Zillow ZORI)
Rent figures come from the Zillow Observed Rent Index (ZORI). It measures asking rents, meaning what landlords list vacant units for, not what sitting tenants currently pay. That makes it move earlier and more sharply than average-rent measures. Zillow builds it as a repeat-rent index: it compares the same unit across successive listings and smooths the result, which damps one-off swings from whatever mix of units happens to hit the market in a given month. The tradeoff is coverage. The index needs enough listings to be reliable, so the smallest towns fall out. In our area, Belvedere, Clayton, Fairfax, and Ross have no rent series at all, which is an absence of data rather than a zero. We chart rent by county, where coverage is complete, and a city you pick resolves to the county containing it.
One consequence is worth knowing before you quote a figure from this site. ZORI is an index first and dollars second. Zillow computes the repeat-rent index, prices it by anchoring to what the middle of the current market is asking, then carries that level back across the whole history. When the anchor moves, every past month moves with it. Between Zillow's May and June 2026 releases, every one of the 2,106 rent figures we carry in both changed, by a typical 2% and, for Mill Valley, by 15%.
So rates of change hold up far better than dollar levels, though not perfectly. Mill Valley's May 2026 rent read $4,546 in one release and $5,238 in the next, a 15% move, while its change over the preceding year went from 5.7% to 5.5%. Across all 1,635 year-over-year changes we carry in both releases, the typical one moved by 0.06 percentage points and the largest by 1.68 (Livermore, July 2024, +3.1% to +1.5%). Fifteen changed sign, all of them close to zero to begin with. So "rent rose about 5% last year" is worth quoting and a specific dollar figure is Zillow's current estimate of the level. If a change is close to zero, check its direction against the current release before leaning on it.
Comparing one place's rent against another's carries both places' anchors, so a small gap between two cities may not survive the next release. Bigger places were steadier across this pair: the two county-wide rent series published in both, Alameda and San Francisco, moved by 0.1% or less, against a typical 2% for the cities. Home values (ZHVI, below) are re-anchored the same way and moved less, at most 2% across the same pair. Every refresh reports which jurisdictions it revised substantially and whether the revision was an even rescale, so a re-anchor and a broken pipeline do not look alike to us either.
Home values (Zillow ZHVI)
Home value figures come from the Zillow Home Value Index (ZHVI). Where ZORI is about asking prices for rentals, ZHVI estimates the value of the housing stock itself: what a typical home in a place is worth, not just the handful that sold last month. Zillow models a value for essentially every home from sales, tax records, and listing data, then averages across the middle of the market and seasonally adjusts. That makes it steadier and more representative than median sale prices, which jump around with whatever mix of homes happened to sell.
Building pipeline (HCD Annual Progress Reports)
Permit and completion counts come from the Annual Progress Reports every California jurisdiction files with the Department of Housing and Community Development (HCD). The raw material is Table A2, a project-by-project list of housing activity. We aggregate those rows into one figure per jurisdiction per year. Income categories follow the RHNA rollup: acutely-low and extremely-low income units fold into very-low, and deed-restricted and non-deed-restricted units at each level are summed. Keep the big caveat in mind. These numbers are self-reported by jurisdictions, and HCD does not independently verify them.
One more wrinkle: the most recent year is provisional. Reports were due in April, late filers keep arriving, and the latest year's counts typically rise for months after first publication. Treat the newest bar as unfinished, not as a final figure.
We soften that on the pipeline chart by saying how many of the 48 jurisdictions have reported the latest year so far, and naming the ones that haven't. We used to go further and fill in a non-filer's prior-year figure as a placeholder, marked “(est.)”. We stopped, because it invented homes: a town that permitted eleven last year and genuinely built nothing this year still got eleven. A year nobody reported is now blank, and a county total missing one of its cities says so and names it. Saying “2,518, missing Clayton” is a smaller claim than “2,521”, and a true one. Reported figures can still be amended upward. Once we've archived enough monthly snapshots of the dataset we plan to publish an empirical completion estimate instead, and we'll explain that method here when it ships.
We also cross-check APR permit counts against the Census Building Permits Survey every refresh. The two use different definitions. The Census survey counts new privately-owned buildings and misses most ADUs and conversions, so APR normally runs higher, dramatically so in small cities where ADUs dominate. Our check flags the cases that genuinely deserve scrutiny: years where the Census count exceeds a city's APR count, which shouldn't happen if the APR is complete, and extreme gaps at high volume. A human reviews every flag. Flags never silently change a number on this site.
Missing data is easy to misread, so here is exactly what it means. Table A2 lists projects, so a jurisdiction with nothing to report files nothing that shows up in it. We cannot tell that apart from a jurisdiction that skipped its report, in any year, including the most recent one. For a single city we show the year as a gap rather than as a zero. For a county we add up whichever of its jurisdictions are present, so a county figure can be missing one of its own cities: Brentwood is absent from 2022, so our Contra Costa total for that year doesn't include it. We mark those years partial in the table, name the jurisdiction that's absent from Table A2, and outline them on the chart. Every figure we show is the sum of what was actually reported, so a partial year is at least the figure shown. We show a trailing five-year window, refresh the data roughly monthly, and stamp every chart with a “data as of” date so you always know how current the numbers are.
Rents, homes, and jobs
This panel puts three series on one timeline per county: what a vacant home is being asked for, how much was built, and how many people here are working. It is built to answer "is rent here getting better or worse, and what is moving alongside it." It is not built to answer "did building more move rents," and it cannot. Building can affect rents, and building and rents both respond to the same local demand, so a reader who reads a cause off these three series is reading something the data does not establish, in either direction.
Counties only. Rents, jobs and permits have different city-level coverage: only about half our municipalities carry all three across the window, and Marin would reduce to San Rafael alone. Cards holding three series beside cards holding two invite a comparison that is not there. A city you select resolves to the county containing it, and the panel says so rather than quietly dropping your selection.
The headline is as published; the chart is inflation-adjusted. Those are different numbers and the card states both. The figure you can check against a listing is the published one, so that leads. But Bay Area rents rose in nominal terms over this period while falling against other prices, so a published-dollars chart would say the opposite of what happened. The adjustment uses San Francisco CPI excluding shelter by default, because CPI shelter is itself a rent measure and deflating rent by an index containing rent partly cancels what we are measuring. Excluding shelter has its own cost: it gives food and energy shocks more weight. You can switch yardsticks, or turn the adjustment off, in the panel's "Inflation adjustment" disclosure.
The price index for San Francisco is published every other month. A month between two published readings is filled in by us and marked as estimated; a gap of two or more months in a row is left empty rather than filled, which is why the adjusted line breaks around late 2025, when federal collection was suspended. Nothing is ever extrapolated past the last published reading, so the adjusted line ends where the index ends while the published rent continues. Filling uses the same geometric method the Bureau of Labor Statistics uses for its own intervening months.
Monthly rent, annual building. The rent index is monthly and is drawn monthly, which is why the line runs past the last year of building data. The annual table averages a calendar year's published months, marks a year with fewer than twelve, and gives no annual figure at all to a year with fewer than 9: averaging three months and drawing it beside twelve-month years shows a rent movement that never happened. That rule drops a rent figure, not a year, so a thin year keeps its building and jobs figures. An annual rent is adjusted once as an annual figure, so it will not exactly match the average of the monthly points on the chart.
Homes completed, per 1,000 existing homes. Completions rather than permits, because a permit does not change the stock that rents clear against, and over this period the rate at which permits become completions has been unstable. Per 1,000 existing homes rather than per 1,000 residents, because additions relative to the stock is the directly interpretable measure of building intensity, and because state population estimates for cities are partly derived from housing stock, which would put a housing figure on both sides of the ratio. A bar is a whole calendar year and is drawn a whole year wide. The latest year with no bar has no Annual Progress Report filed yet.
Jobs are context, not demand. The bottom strip is the change in employed residents per 1,000 residents. It is here because a chart showing only building and rent invites you to attribute the whole movement to building, and over this period employment swung by much larger percentages of its own base than housing stock did. But employment is not housing demand: people also leave a place because housing there is expensive, which makes the causation run both ways. It has its own strip rather than sharing the building plot, because two series scaled independently in one plot produce an apparent crossing point that is an artifact of the scaling. One caveat from the source: the 2025 county averages cover eleven months, because October collection was suspended, so 2025 is not strictly comparable with earlier years.
A county total missing one of its cities is marked. Building figures are self-reported, and a city that did not file is a gap rather than a zero. A county-year missing a member is drawn as a lighter bar, names who is missing in its tooltip and in the table, and is a floor rather than a total.
RHNA pace
Every California jurisdiction gets an eight-year housing target, its Regional Housing Needs Allocation (RHNA), split across four income bands. The Bay Area's 6th cycle runs from January 31, 2023 to January 31, 2031. A raw progress percentage flatters everyone early in the cycle, so we show prorated pace instead: how far along a jurisdiction should be by now if it were building steadily. If a city is 44% of the way through the cycle, being on pace means having permitted 44% of its target. We divide what it has actually permitted by that prorated target, so 100% is exactly on pace and 16% means it's permitting at about a sixth of the rate its own target requires.
Allocations and cumulative permits both come from HCD's RHNA Progress Report, which HCD compiles from the same self-reported annual reports and which therefore lags. We prorate the target to that data's own reporting date so the two sides of the ratio are measured at the same moment. HCD publishes only the raw cumulative share; the prorated pace is ours, and it's the number worth arguing about, so the underlying counts are right there in the table.
How recommendations are scored
The recommendations page scores each option 1–5 on four dimensions: supply impact (how much housing it could unlock), evidence strength (how solid the research behind it is), public cost (higher is cheaper, so a 5 is near-free to the public purse), and speed (how soon it could matter). Higher always means more attractive. The ranks are our judgment given the scores and the named tradeoffs, not a formula. Every score is contestable, and each entry links its sources so you can argue with us.
Legal tracker
The legal developments page is curated by hand from primary sources: statute text, ordinances, agency guidance, and court filings. Every entry carries the date we last reviewed it. Each one separates what the law says as written from what's actually happening on the ground, because in housing law the gap between the two is usually the story. The one part we don't maintain by hand is the compliance strip at the top. That loads from HCD's housing element compliance dataset, which refreshes weekly.
The full list of datasets, licensing, and links is on the sources page. Every number on the site links back to one of them.