Government & Compliance
Data behind the housing element and general plan annual progress report
Where annual progress report numbers come from in permit and entitlement records, and how to instrument systems so the report is a query.
Every January, planning staff start assembling the annual progress report on the general plan and its housing element. California law directs cities and counties to report each year on the status of the general plan, progress toward implementing it, and progress toward meeting the regional housing needs allocation, with the report going to the state planning office and to the Department of Housing and Community Development (HCD) on forms the department publishes and periodically revises. The numbers themselves are not new. They already exist in permit issuance records, certificate of occupancy records, entitlement files, and affordability agreements.
The problem is shape, not availability. The report wants units, not permits; it wants three separate milestone dates per unit; and it wants an affordability status that most permitting systems never capture, because affordability is created by a recorded covenant rather than by a building code action. Agencies that instrument the permit system for these fields turn the report into a query. Agencies that do not spend several weeks each winter counting by hand.
What the report actually asks for
The forms are organized around distinct populations of records, and confusing them causes most of the rework:
- Applications. Residential development applications submitted during the reporting year, with units proposed, units approved or disapproved, and whether a streamlined or ministerial pathway was requested.
- Unit actions. Units that received an entitlement, a building permit, or a certificate of occupancy during the year, broken out by income category and by deed-restricted status.
- Programs and narrative. Status of each housing element implementation program, progress on other general plan elements, and supplemental items such as sites rezoned, density bonus projects, accessory dwelling units, and units demolished or lost.
Form structure and instructions change between cycles. Confirm the current version with HCD before building anything against it.
Three dates, not one
Entitlement, building permit issuance, and certificate of occupancy are reported separately, and the same unit legitimately appears in three different reporting years. Your permit system must store each as a discrete, dated field on the record, tied to the official action rather than to a record modification timestamp.
Common failure points: entitlement dates captured only in the planning case management system and never joined to the permit record; certificates of occupancy issued as temporary and then final, with no rule about which one counts; and permits that expire, are voided, or are reissued under a new number, producing duplicates or dropped units.
Counting units, not permits
- Store a unit count on every residential record. A permit for a forty-unit building is one permit and forty units. Reporting from record counts undercounts production badly.
- Separate demolished or lost units. They are reported on their own and affect net progress.
- Find your ADUs. Accessory and junior accessory dwelling units are frequently issued under a residential addition or alteration record type, where they disappear from any query filtered on new construction.
- Write down your edge case rules. Mixed use, live-work, group quarters, single room occupancy, and phased projects all require a local counting convention. Document it, apply it consistently year over year, and keep the note with the submitted file.
Affordability is a covenant, not a checkbox
A building permit record almost never knows whether a unit is income restricted. That fact originates in a regulatory agreement, an inclusionary housing agreement, a density bonus agreement, a tax credit regulatory agreement, or a local funding contract, and it usually lives with the housing division or successor agency.
Capture at minimum: deed-restricted yes or no, unit counts at each income level used by the state form, the recorded agreement or instrument number, the restriction term, and the funding source. Non-deed-restricted units reported as affordable need a documented basis, such as an approved affordability study or rent survey. Name one office as the source of truth for these fields, and link records by assessor parcel number plus project identifier so the join survives address changes.
Streamlining determinations and program status
Capture at intake whether an applicant requested a streamlined ministerial pathway, which statute was invoked, the date of the determination, and the outcome. Reconstructing that from correspondence a year later is slow and error prone. The same applies to application completeness dates and approval or denial dates.
Housing element program status is not permit data at all. Keep a simple register keyed to your adopted program numbers, with a responsible department, milestone dates, and a short status note updated during the year. This is also the record your agency relies on if implementation is ever questioned.
Instrumenting the permit system
- Write a data dictionary naming each reported field, its source system, its owner, and the workflow step where it becomes known.
- Add the fields to residential record types and make them conditionally required at that step, not at closeout.
- Add validation: units by income category cannot exceed total units, and deed-restricted units require an agreement identifier.
- Build a unit-level reporting view with one row per unit per milestone, exposed to your analysts rather than buried in the transactional schema.
- Map that view to the current state template and run the export monthly, so gaps surface in March rather than in January.
- Archive a copy of every submitted file and its underlying extract for reconciliation against cumulative allocation progress.
What to ask vendors and how to start
Before your next permitting procurement or upgrade, ask:
- Can we add and edit configurable fields on residential record types without vendor custom code, and are those fields immediately reportable?
- Do we get direct read access to a reporting database or documented views, or a documented API that returns unit-level data with all milestone dates?
- How does the vendor handle changes to state reporting forms, and who bears that cost?
- What are our data extract and ownership rights, including at termination?
A useful evaluation exercise is to hand a candidate system your last submitted report and ask how it would reproduce those totals from its own records. HQT works with state and local agencies on permitting data models, reporting extracts, and integrations between land management, housing, and finance systems.
Frequently asked questions
When is the housing element annual progress report due?
California cities and counties submit the annual progress report on the general plan and housing element to the state planning office and to HCD each year, covering the prior calendar year. HCD publishes the current forms, instructions, and submittal deadline, and both the forms and the guidance change between cycles. Confirm the current deadline and form version with HCD, and involve your agency counsel if a filing question has legal consequences.
What counts as a completed unit for the annual progress report?
Completion is generally tied to the certificate of occupancy or the equivalent final approval that allows the unit to be occupied, not to the building permit date. Agencies that issue temporary certificates of occupancy should adopt a written rule about which action counts and apply it consistently every year. Store that date as its own field on the permit record so completions can be queried directly rather than inferred from permit status.
Our permit system does not track deed-restricted affordability. How do we report it?
Affordability is created by a recorded covenant or regulatory agreement, so the authoritative record usually sits with the housing division, successor agency, or the funding program file rather than the building department. Add fields to the permit or project record for deed-restricted status, units at each income level, and the agreement identifier, then populate them from the housing office at entitlement or permit issuance. Linking by assessor parcel number plus project identifier keeps the join stable when addresses change.
Can the annual progress report be generated automatically from a permitting system?
Most of it can, provided the system stores unit counts, all three milestone dates, affordability fields, and streamlining determinations as structured data. The realistic target is an export that fills the unit and application tables, leaving program status and narrative sections to staff. Running that export monthly rather than once a year surfaces missing fields while the underlying records are still fresh enough to correct.
What should we do if we find an error in a report we already submitted?
Keep an archived copy of every submitted file and the extract behind it so you can identify exactly what changed and why. Contact HCD about the correction process, since resubmittal and amendment practices are set by the department and can change. Document the correction in your reconciliation notes so that future cumulative allocation progress totals line up with the corrected figures.