The Housing Audit

We rebuilt Berkeley's housing-completion record from raw public permits, independently of the City's official filings, then examined where the two records disagree. This page is what we found, with the evidence for each finding.

As of 2026-09-30 · berkeleybuild.com

4,119
units completed 2018–2025
our count, from raw permits
4,022
units completed 2018–2025
the City's reports to the state
+97
difference
+43
explained by the findings below
+54
not yet attributed
What this page claims. Every finding below has its evidence: the City's own reports, permits, plan sets and staff reports. +54 units of the difference are not yet attributed to a named building. On 2026-09-26 we re-read every permit under the definition of a housing unit used by the state housing department (HCD), and we have not yet re-examined every row of disagreement since. We show the open number rather than hide it; it shrinks as findings are verified.

Year by year

Completions counted in each calendar year. The City's figures are its annual reports to the state, as published in HCD's open data. "Explained" is the sum of the verified findings for that year.

YearOursCityDifferenceExplainedNot yet attributed
2018233229+4—+4
2019326313+13—+13
2020410405+5—+5
2021416331+85+84+1
2022830828+2—+2
2023626716-90-96+6
2024707708-1—-1
2025571492+79+55+24
2018–20254,1194,022+97+43+54

Why the comparison starts in 2018

Because that is where the City's building-by-building record starts. We compare against the City's Annual Progress Reports to the state, and the state's open-data copy holds Berkeley's project-level rows for 2018–2025. Each row names a project and the year it was entitled, permitted and completed. That is what makes a building-by-building comparison possible.

The start date comes from state law. Two 2017 housing laws, Assembly Bill 879 and Senate Bill 35, changed what cities must report. The state housing department (HCD) rewrote the report form to match, and its guidance draws the line at 2018: “For the years 2017 and prior, you must use the old version of the APR.” Berkeley's rows in the state's open data begin with 2018, the first year on the new form. (HCD report instructions; HCD FAQ.)

Our permit records were requested to match. The City's permit reports, obtained through public-records requests, cover permits from 2018 onward.

What did not set the date. Berkeley's Measure O housing bond and Measure P transfer tax both passed in 2018, but their money reached projects from 2019 on, so 2018 is simply the year before the new local money. The current state housing-target cycle (RHNA) starts in mid-2022 and counts building permits, not completions. Some of our other records reach further back (state tax-credit awards to 1991; we are collecting City planning records back to 2006), but without the City's project-level filings there is nothing to compare them against.

What we found in the City's record

A positive number means the City's record undercounts relative to ours; a negative number means it counts something we don't. Rows marked "carried from July" come from our earlier audit and are not counted in "explained" until re-verified under the current definitions.

FindingUnitsWhat happenedEvidence
The Overture
1812 University Ave · 2021
+44The City's CY2021 annual-progress-report PDF lists this 44-unit building as completed; the state's public copy of the same report (HCD's open-data file) has no row for it.
Re-confirmed 2026-09-29 against the CY2021 PDF (both this row and The Den).
docs/audit/2026-07-03_overture_retraction_and_ckan_target.md
docs/audit/2026-06-05_cy2021_apr_pdf_vs_ckan_co.md
The Den
2510 Channing Way · 2021
+40The City's CY2021 PDF logs a completion here (36 units); the state's public copy drops the row. We count 40 from the building's own records.
Our count and the City PDF differ by 4 units; the state copy counts none.
docs/audit/2026-07-03_window_and_den_writes.md
Poet's Place
2435 San Pablo Ave · 2025
+41The City reported the building permit (41 units, 2022) but no completion, although the building was finaled on 2025-03-20. Its rooms are single-room-occupancy tenancies, which HCD counts as housing units.HCD APR table A2 (CY2022 BP row
no CO row)
proj932_san-pablo-ave_2021-11-18_drc-staff-repor
Step Up Housing
1367 University Ave · 2025
+39The City reported the building permit (39 units, 2023) but no completion, although the building opened in 2025. Rooms are SRO tenancies: tenants pay 30% of income (City memo, 2023-08-22).HCD APR table A2 (CY2023 BP row
no CO row)
2023-08-22 Update on Step-Up Housing - Off Agend
proj158_1367-university-ave_2020-06-30.pdf
2100 San Pablo (Spirit Living)
2100 San Pablo Ave · 2023
-96The City counted 96 units at completion. The building is a licensed residential care facility for the elderly: shared rooms, no kitchens, central dining. The City's own zoning staff report found it is NOT a housing development project under state law. HCD treats such assisted-living facilities as group quarters, not housing units.
The City's own records also say 94 suites while every count says 96, and report the entitlement twice (2018 and 2022).
proj467_2100-san-pablo-ave_2019-04-25.pdf (staff report
unit plans A.14-A.15)
2000 Dwight
2000 Dwight Way · 2025
-25The City counted 113 units. The plans show 88 apartments with their own kitchens and 25 memory-care rooms without kitchens; the City's planner wrote it was 'continuing to count all units, including the 2nd floor units without kitchens'. HCD counts the 88; the memory-care rooms are group quarters.proj173_2000-dwight-way_2020-08-21.pdf (sheet A2.5)
proj173_2000-dwight-way_2020-04-28.pdf
2100 San Pablo entitlement reported twice
2100 San Pablo Ave · 2018/2022
—The same 96-unit entitlement appears in the CY2018 and CY2022 reports.
Affects entitlement totals, not completions.
HCD APR table A2 rows 2018 and 2022
Step Up report rows
1367 University Ave · 2020/2023
—The 2020 row carries another project's parcel number (2023 Shattuck's 057 203400800); the 2023 row's tracking id is 'zc'.HCD APR table A2 rows 2020 and 2023
CY2025 report submitted twice
citywide · 2025
carried from July; not re-verified
—Berkeley's CY2025 report reached the state twice (474 rows where about 126 belonged); later cleaned upstream. Dated snapshots prove it.
Carried from the July page; not re-verified since 2026-09-26.
docs/audit/2026-06-07_journalist_demo_prep.md
Double-crediting and an eliminated unit (five classes)
various · 2018-2025
carried from July; not re-verified
-8Units credited at permit issuance and again at completion; utility-meter permits re-crediting the units they serve; 1023 Cragmont's JADU, whose own revision permit says 'Proposed JADU has been eliminated'.
Carried from the July page; not re-verified since 2026-09-26, so not counted in the gap attribution.
docs/audit/2026-07-03_uncertains_resolution.md

What we found in our own work

Independent verification cuts both ways, or it is worthless. The audit keeps our mistakes beside the City's, with the fix for each.
FindingUnitsWhat happenedEvidence
Logan Park South counted twice
2352 Shattuck Ave · 2023
—Our 2026-09-26 rebuild counted the building's Phase I and Phase II permits (69 units each). Fixed 2026-09-29: the Phase II permit carries the units.corrections/v4/grounded_counts.csv (phase_carried B2019-05575)
A re-final counted twice
B2014-01391 · 2021/2026
—A house with an attached ADU was finaled in 2021 and again in 2026; both were counted. Fixed 2026-09-29 (count once, at the first final).corrections/v4/dedup47_permits.csv
Care and congregate buildings judged by their label
various ·
—Our model read three such buildings from the permit's label; the unit plans overturned or reframed each (2000 Dwight, 2100 San Pablo, Step Up). Such permits now read as 'unclear' until someone reads the plans.scripts/housing_rules/reading_rules.py (2026-09-29)
A false fact taken from the City report
1367 University Ave ·
—Our ledger once credited Step Up's rooms with in-room kitchens, citing the City's report note. The plans show none. The City report is our comparison target, never a source; the evidence was replaced.corrections/v4/grounded_counts.csv (B2022-04366)
Retractions from July
various ·
carried from July; not re-verified
—We retracted in writing: a mis-adjudication of the Overture (the state copy was the problem, not the City), an early 'the City mis-filed El Jardin' hypothesis (the City was right: 55 co-living apartments), and a phased-building demotion premised on an expired permit.
Carried from the July page.
docs/audit/2026-07-03_overture_retraction_and_ckan_target.md
An unworked inspection queue
various ·
carried from July; not re-verified
—Our classifier parked 'alteration with conversion language' for inspection, and that queue went unworked: about 190 units of garage conversions, basement ADUs and legalizations the City correctly credited and we initially did not.
Carried from the July page.
docs/audit/2026-07-03_uncertains_resolution.md
An electrical permit read as 5 new units
1421 Arch St · 2025
—Permit B2024-05916 says only 'Renew old permit B2017-02937'. That 2017 permit is an electrical permit: 'upgrade main service to 200 amps, with (6) meter change outs, & (6) 60 amp sub-panels'. Our model read the permit's unit field (5, the building's existing units) as 5 new units. The City correctly counts none. Corrected 2026-09-30 by a reading ruling (in live v4 since the 2026-09-30 swap): our count fell by 5, and building permits by 5. Accela itself lists B2024-05916 as an 'Electrical Permit'. Its full record at 1421 Arch, 2010-2026, is three items: a 2010 foundation and retaining-wall clearance, the 2017 electrical upgrade, and its 2024 renewal; nothing creates units. No record under a '0 Arch' address; the assessor shows improvements of $36,762 and a non-residential use code.
Found while attributing the +66 (docs/audit/2026-09-30_attributing_the_66.md).
data/raw/accela/date_range/Building_2017-07-05_2017-07-08.jsonl (B2017-02937)
data/processed/permits_clean.csv (B2024-05916)
data/raw/accela/date_range/Building_2024-12-15_2024-12-18.jsonl (B2024-05916: 'Electrical Permit')
databases/berkeley.db parcels 59-2253-41-1
A rear-structure remodel read as 4 new units
2501 Telegraph Ave · 2020
—B2017-05275 completes work under B2014-04083, whose Accela record reads 'REMOVE DELAPIDATED REAR 2 STORY STRUCTURE AND EXIT STAIRS AND REPLACE WITH NEW 363 SQ.FT. STRUCTURE' (valuation $43,121, Closed Expired). Its revisions convert storage to laundry and bring the 2nd floor to code. The parcel is the landmark Woolley and Blood houses (relocated under 2007-2013 Planning approvals; Mills Act 2014) over a ground-floor cafe. Nothing creates units; the model read the unit field (4, the existing apartments) as new units. The City correctly counts none. Corrected by a reading ruling, applied in the 2026-09-30 swap.
Found while attributing the +61. Same failure as 1421 Arch (O07).
data/raw/accela/capdetail_manual/B2014-04083_2026-09-30.txt (Accela CapDetail 2026-09-30)
data/raw/accela/date_range/Building_*.jsonl and Planning_*.jsonl records at 2501 Telegraph
An existing duplex's electrical upgrade read as 2 new units
2212 McGee Ave · 2025
—B2024-03341: 'duplex at 2212 McGee and 2214 McGee. upgrade service to 200amp. replace two existing 70amp panels'. The building is an existing duplex (assessor use code 2600); a 2023 housing-code case (H2023-00659) already required water heaters 'for unit 2212 and 2214'. Nothing new was built; the model read the duplex's 2 units as new. The City correctly counts none. Corrected by a reading ruling, applied in the 2026-09-30 swap.
Found while attributing the +61.
data/raw/accela/date_range/Building_*.jsonl (B2024-03341, B2023-06406)
databases/berkeley.db parcels 56-2008-9
An electrical permit read as 3 new units (a double count of an ADU)
2707 Hillegass Ave · 2019
—B2019-02963 is an Electrical Permit (Accela): 'Replace single unit with main to (2) unit main adding legal cottage'; Closed Expired, never finaled. The cottage itself was built under B2018-00483 ('Remodel (E) workshop to in law unit'), which we count once (1 unit, finaled 2019). The model credited the electrical permit with 3 new units at issuance. Completions are unaffected; building permits are 3 too high (2019, 5th cycle). Corrected by a reading ruling, applied in the 2026-09-30 swap.
Found by the misread sweep.
data/raw/accela/date_range/Building_*.jsonl (B2019-02963, B2018-00483, 2707 Hillegass)
docs/audit/2026-09-30_misread_sweep.md
A house remodel read as a new unit (a double count of an ADU)
2334 Jefferson Ave · 2020
—B2018-01255 remodels the existing house: 'raising (E) structure 5.5', adding 515.7 SF of finished habitable space to lower level' (valuation $320,000; UnitsAdded blank, NumberUnits 1 = the house). The ADU was built under its own permit, B2018-01256 ('Demo portion of garage/storage building and build attached ADU to garage', UnitsAdded 1, finaled 2023), addressed #B in 2022, and counted once. The model counted the remodel as a second new unit: completions +1 (2020), permits +1 (2018). Corrected by a reading ruling, applied in the 2026-09-30 swap.
Found by the misread sweep (the one "unclear" case).
data/raw/accela/capdetail_manual/B2018-01255_2026-09-30.txt
data/raw/accela/date_range/Building_*.jsonl (2334 Jefferson: B2018-01256, PREAPP000856)

How to check us

Every count traces to a primary document: the permit's own text, the building's plan set, the City's staff reports. The City's report is what we check against, never what we count from. Every correction is a row in a public ledger (195 entries, each with its evidence), every finding is a row in audit_findings.csv, and every change appends a new dated baseline; nothing is silently edited. The pipeline rebuilds from the raw permit files:

JN-A (ingest) → JN-B (dedup) → JN-C (classify) → JN-F (corrections) → buildings → JN-E (reconcile)

The notebooks, ledgers, baselines and audit memos, including our retractions, are in the public repository. The curriculum teaches the method for any city.

Generated 2026-09-30 (baseline 2026-09-30i) by scripts/v4/build_audit_page.py: the figures are derived at build time, not typed.