Skip to content

Site sourcing and screening — California

Phase 1 of 11

"Is this a parcel worth a phone call?"

Covered in EZFeasiDays to two weeks per site

What the two weeks actually look like

There is no phase of a deal called "data acquisition." Data acquisition is a standing tax levied on every other phase, paid by whoever is least senior enough to argue. In a real shop the pattern is consistent: an analyst has a site, and over roughly the next two weeks works through the following.

The two-week screen
StepWhat it involves
Assessor recordPull the parcel's assessor record
ZoningFind the zoning and read the zoning ordinance PDF to work out what the zone code actually permits
Flood hazardCheck FEMA flood
Fire hazardCheck fire hazard
Census tract statusCheck whether the tract is a QCT or DDA
Income limits and rentsLook up this year's income limits and derive max rents
Basis limitsFind the applicable threshold basis limits
Comparable awardsLook for nearby comparable LIHTC awards to sanity-check density and cost
Construction costGet a number from either a GC relationship or last year's deal escalated by a guess

Roughly half of those steps involve reading a PDF and typing numbers into Excel by hand. The distribution is not even.

Refresh cadence by data type
Data typeHow often it's actually refreshed
Site-screening dataQueried in seconds
Underwriting data (income limits, rents)Refreshed annually, by hand, in a panic, in the two weeks after HUD publishes income limits, because every model in the shop has last year's rents hardcoded in it
Zoning dataRefreshed never, until someone gets burned

Two decisions come out of this phase. The first is whether to pursue the site at all. The second — usually within days of the first — is what price goes into the LOI, and that is where screening quietly becomes underwriting. Under 4 CCR Section 10325(c)(9)(A), if the paid purchase price exceeds appraised value, the leveraged soft resources amount in the tiebreaker is discounted by the overage, unless the Executive Director waives it under Section 10327(c)(6). A developer who overpaid for land can be scored out of the round for it. That consequence is rarely modeled at LOI time, and it is pure arithmetic if the tiebreaker is modeled before the price is agreed.

The parcel layer is a fleet of adapters, not a dataset

There is no single authoritative statewide California parcel layer with attributes. There are three partial answers, and the working one is per-county ArcGIS REST services. That is not a "write one adapter" problem — it is a fleet of fragile adapters that need monitoring, and it does not get easier with expansion. Every new county is a new adapter, and every new state is a new legal regime for whether assessor data is even public.

The breakage is real and current.

Known parcel-service breakage, by county
CountyIssue
San Diego (SanGIS/SANDAG)Advertises a maxRecordCount of 2000 and returns geometry in EPSG:2230 (California State Plane Zone 6, US survey feet), not WGS84 — while at least one internal note claims 10k paging was confirmed
Los AngelesGenuine endpoint churn: public.gis.lacounty.gov parcel paths 404, apps.gis.lacounty.gov sits behind a bot-detection shim, and only dpw.gis.lacounty.gov responded cleanly
ImperialGIS host does not resolve in DNS at all

Those cannot both be true, and an ingestion loop that believes it got 10,000 records and got 2,000 produces a partial county that looks complete.

The fallbacks are worse than they sound.

Parcel-layer fallbacks
FallbackWhat it actually gives you
Statewide 2014 parcel snapshotRoughly 3.4 GB zipped; standardized down to essentially the parcel number alone — geometry with an APN and nothing else, twelve years stale. A geometry backstop, not an underwriting source.
Regrid (commercial)Publishes nationwide coverage starting at $80K/year; whether that license permits redisplaying parcel attributes to your own paying end users, as opposed to internal analytic use, is not answerable from the public pricing page.

That single term should be nailed down before anything is built on top of it.

Zoning: the code is a pointer, and the pointer has a vintage

Zoning normalization is usually hand-waved as "every city is different." The real reason is more specific: a zone code (R-3, MU-2, PD-14) is a pointer into a municipal code document, not a value. Two cities' R-3 are unrelated. The density, height, and parking that actually drive a feasibility model live in a table inside a PDF ordinance, and in overlays, specific plans, and planned developments that override the base zone. There are 539 jurisdictions in California, each amending independently.

For Southern California, SCAG's regional land use layers are the best available answer and are parcel-keyed.

SCAG regional land use layer schema
FieldWhat it carries
APN24Joins directly to a parcel table with no spatial overlay
ZN24_CITYRaw local zone code
ZN24_SCAGSCAG's normalized zone code
ZN24_SCAG_2ND / ZN24_RATIO_2NDSecondary zone and its area ratio, for split-zoned parcels
YEAR_ZNVintage of the underlying local zoning
~5.1M parcels across 197 jurisdictions, 2024 vintage, updated May 2025SCAG coverage
72 distinct ZN24_SCAG values in Riverside County — a 72-row lookup table, not an AI problemNormalized zone vocabulary

Vintage is the weakness, and it is measurable.

45 total, 16 with a NULL zoning vintageRiverside County city/vintage combinations
2016–2025Populated vintage range

Roughly a third of Riverside jurisdictions have zoning of unknown age. Any zoning-derived number must be displayed with its vintage attached, and where the vintage is null that must be shown as null rather than silently omitted.

The statewide fallback — California Statewide Zoning North/South, published by the Office of Land Use and Climate Innovation — is open, downloadable in unusually many formats, and older. Its own metadata is candid: data was collected from 535 of California's 539 jurisdictions, with PDF and image maps geo-referenced and transposed onto assessor parcel geometry, collection beginning in late 2021 and mostly finished in late 2022. The state disclaims accuracy outright.

Two hard constraints in the statewide zoning layer
FieldProblemGuidance
DateFree text, not a date — distinct values include 1998, 2007, 2009, 2014 through 2023, plus truncated fragments, a blank, and a nullSalvage it as a string, not a date
ucd_numberInconsistently populated — six of fourteen description values carry a NULL numberKey on ucd_description or build your own crosswalk; do not key on ucd_number

One asymmetry belongs in the data model rather than papered over: SCAG covers five of the six counties in EZFeasi's footprint. San Diego is outside SCAG and needs SANDAG's own layer or the statewide fallback.

The hazard layers you can query are not the ones that kill deals

This is the most important structural fact about environmental screening, and it should be stated in the product rather than buried in terms of service. Flood and fire — the hazards that mostly cost money — are wide open.

Open hazard layers
LayerAccess
FEMA National Flood Hazard LayerPublic, unauthenticated, federal, and therefore fully portable; flood hazard zones sit on layer 28 of the NFHL MapServer
CAL FIRE Fire Hazard Severity ZonesOn data.ca.gov under CC-BY, in REST, CSV, GeoJSON, SHP and KML (the agency host egis.fire.ca.gov 404s — go through data.ca.gov)

The hazards that end deals are the ones behind a wall.

Hazard layers behind a wall
LayerStatus
DTSC EnviroStor site_search APIReturned HTTP 403 to a scripted client
SWRCB GeoTracker bulk downloadAlso returned 403
Archaeological and SHPO site locationsWithheld by law to prevent looting
Tribal cultural resourcesConfidential by statute

There is no engineering fix for the last category, and there should not be.

The corpus disagrees on EnviroStor specifically, and the disagreement is worth surfacing rather than resolving silently. One source lists EnviroStor as bot-blocked and puts it on a do-not-automate list; another lists it as verified-live and machine-readable. They tested different endpoints — the 403 came from envirostor.dtsc.ca.gov/public/api/site_search, while the ArcGIS Public Data Export responded and carries an apn field, meaning it joins directly to a parcel roster with no spatial work. The do-not-scrape-past-a-403 principle is correct; applying it to the dataset name rather than the endpoint suppressed a near-free build. GeoTracker really is blocked — link out, do not work around.

The practical consequence for anyone building or using a screen: absence of a hit on the layers you can query says nothing about the layers you cannot. A green checkmark across every published environmental layer implies a cleanliness the screen cannot support, and contamination discovered at Phase I or Phase II — after site control, with escrow money already spent — is a recurring deal-ender. Seismic layers carry a related trap: "not in a zone" and "never evaluated" are different answers, and a screen that collapses the unevaluated layer into a clean result is reporting something false.

Screening evidence is not certification

4 CCR Section 10325(c)(2)(N) makes "certification of site amenities, distances or service amenities that were, in the Executive Director's sole discretion, inaccurate or misleading" a negative-points offense. Negative points attach to people and firms, not projects — Section 10325(c)(2) allows up to 10 negative points per project and/or per violation, assignable to general partners, co-developers, management agents, consultants, guarantors, or any member or agent of the Development Team, across 23 enumerated grounds.

Every recommended project and every alternate scored 109.00 points2026 Round 1 9% scoring
112.212% down to 15.026%Tiebreaker range

In a field like that, a single negative point is fatal for as long as it applies.

This is the largest liability surface in any automated screening product, and the discipline is simple: a computed distance is screening evidence with a cited source, to be independently verified by a human before it is certified. It is never the certification itself.

Two related corrections belong here because they are cases of a screen implying more than it knows. First, an Opportunity Area designation does not, in 2026, confer a threshold basis limit benefit in Southern California: the 10% High/Highest Resource basis-limit increase is gated on the county's unadjusted 9% two-bedroom limit being at or below $500,000.

2026 unadjusted 9% two-bedroom threshold basis limit, by county
County2BR limit
Los Angeles$608,800
Orange$559,200
San Diego$545,600
Riverside / San Bernardino / Imperial$531,200

The lowest among the six covered counties is $531,200 — above the $500,000 gate, so the Opportunity Area basis-limit bump is unavailable across all six counties today. The gate can flip in a future January.

Second, a transit tier derived purely from HQTA captures the Government Code Section 65912.123(b)(1)(E) density override and none of AB 2011's actual gating — treating it as an eligibility signal materially overstates AB 2011 availability.

Where the screen stops, and what it cannot tell you

The further right you go in a deal's life, the worse the data gets, which is the inverse of what a feasibility product wants.

Restricted-rent and basis-limit data availability
DataSourceFormat
Restricted rents (2026 income and rent limits)CTCAC, not HUDAll seven linked data files are PDFs — no XLSX, no CSV, no API. Tables branch on three placed-in-service vintages, because a property's applicable limit depends on when it was placed in service.
Threshold basis limitsCTCACAnnual PDF
HUD SAFMR by ZIPHUDEasy to carry at screening, but it is a voucher payment standard, not a Section 42 restricted rent, and should never stand in for one.

Construction cost is the biggest hole in the landscape. There is no free, authoritative, California-specific, unit-level affordable-housing cost dataset.

Construction-cost data sources
SourceWhat it gives you
BLS Producer Price Index (inputs-to-construction series)Free, keyless, federal. July 2026 reading: 374.039, flagged preliminary — all indexes subject to monthly revision for up to four months after publication. Gives escalation, not level.
RSMeans / ENRSubscription products whose terms should be assumed to prohibit redistribution
Threshold basis limitsRegulatory caps on eligible basis, not cost estimates — conflating the two is a classic and expensive error

Jurisdiction behavior is partially answerable and almost nobody uses it.

HCD Housing Element Annual Progress Report (APR)
AttributeDetail
FormatTwelve CSV tables published under the Gov. Code Section 65400 mandate
CoverageRaw data available from 2018 forward
What it answersPermits issued against RHNA allocation, by income category, by year — a defensible quantitative answer to "does this city ever actually permit anything?"
LicenseLicense field reads "License not specified," which is not an affirmative grant

What APR data does not give you is entitlement duration: it tells you a permit issued in a year, not that the application took 31 months. Per-project entitlement duration does not exist as a public dataset anywhere in California. It lives in city permit portals with no public API, in staff memory, and in land-use counsel's heads. CEQAnet is not a substitute — ministerial pathways generate no CEQA document at all, so a CEQAnet-derived sample is systematically composed of slow discretionary deals, which is precisely the path a streamlined affordable project is trying to avoid.

One free asset worth wiring in at screening: CTCAC's List_of_Projects.xlsx.

4.67 MBFile size
6,196 data rows × 61 columns, plus 57 per-county sheetsRows and columns

It carries both APN and census tract, so it joins directly to a parcel table. It gives unit counts by bedroom and by AMI band, annual federal award, total state award, developer, general partners and management company.

Extraction caveats seen live
FieldGotcha
Credit typeStored as a float (0.09 / 0.04), not as "9%"
Award columnsStored as strings
BlanksAppear as both None and empty string

Finally, the honest limit. Whether the seller will actually extend the option, whether the city planner will fight the project or fast-track it, whether a competitor is about to file in your region and at roughly what tiebreaker — none of that is a dataset, and none of it should be synthesized. Give the user a place to record their own judgment and its date. What screening can and should do is make sure the arithmetic questions are answered before the phone call: the region's available apportionment, the tiebreaker at the LOI price, the site control clock, and the hazard layers you can actually see.

Where this goes wrong

  • Silent pagination truncation: an ingestion loop that believes it received 10,000 features when the service capped it at 2,000 produces a partial county that looks complete, and nobody notices until a user asks why their parcel is missing.
  • Reading only ZN24_SCAG on a split-zoned parcel. ZN24_SCAG_2ND and ZN24_RATIO_2ND exist because split zoning is common; ignoring them overstates buildable density on a meaningful fraction of parcels.
  • Parsing the statewide zoning layer's Date field as a date. It is free text containing values like 1998 and 2007 alongside truncated fragments, a blank and a null. Salvage it as a string.
  • Keying on ucd_number in the statewide zoning layer. Six of fourteen distinct description values carry a NULL number, including Urban residential, Suburban residential and Planned area.
  • Hardcoding an LA County parcel endpoint. The public.gis.lacounty.gov parcel paths 404 and apps.gis.lacounty.gov is behind bot detection; whatever URL is hardcoded for LA will break.
  • Presenting a clean hazard screen as environmental clearance. Contamination sits behind a 403, archaeological and SHPO locations are withheld by law, and tribal cultural resources are confidential by statute — the layers that most often kill a deal are the least accessible.
  • Collapsing the seismic Unevaluated Areas layer into a boolean. "Not in a zone" and "never evaluated" are different answers and only one of them is reassuring.
  • Treating a computed amenity distance as the certification rather than as evidence. 4 CCR Section 10325(c)(2)(N) makes inaccurate or misleading amenity/distance certification a negative-points offense at the Executive Director's sole discretion.
  • Implying that an Opportunity Area designation confers a threshold basis limit benefit. The 10% increase is gated at an unadjusted 9% 2BR limit of $500,000 or less, and the lowest of the six covered counties is $531,200.
  • Deriving AB 2011 eligibility from an HQTA-based transit tier. That derivation captures only the Government Code Section 65912.123(b)(1)(E) density override and none of AB 2011's actual gating, so it overstates eligibility.
  • Agreeing an LOI price without modeling the tiebreaker. Purchase price above appraised value discounts the leveraged soft resources term under 4 CCR Section 10325(c)(9)(A) unless waived under Section 10327(c)(6).
  • Using HUD SAFMR as a rent assumption. It is a voucher payment standard, not a Section 42 restricted rent, and the restricted rent tables exist only as PDFs branching on three placed-in-service vintages.
  • Benchmarking entitlement duration from CEQAnet. Ministerial pathways generate no CEQA document, so the sample is systematically composed of slow discretionary deals — the opposite of the pathway most affordable projects use.
  • Screening a site well and never checking the region's available apportionment. Multiple geographic regions in 2026 Round 1 had no recommended projects at all.

At a glance

Jurisdictions in California
539, each amending zoning independently
SCAG zoning coverage
~5.1M parcels across 197 jurisdictions, 2024 vintage, updated May 2025
Riverside County zoning vintage
16 of 45 city/vintage rows carry no vintage; populated ones span 2016–2025
Normalized zone vocabulary
72 distinct ZN24_SCAG values in Riverside County
LCI statewide zoning
535 of 539 jurisdictions; South layer 304,324 features; collected late 2021 to late 2022
SANDAG parcel service
maxRecordCount 2000 advertised; EPSG:2230, not WGS84
Statewide 2014 parcel snapshot
~3.4 GB zipped; attributes standardized down to the parcel number alone
Regrid commercial parcel license
Nationwide coverage published as starting at $80K/year; SaaS redisplay terms unresolved
2026 9% Round 1
Every recommended project and alternate scored 109.00; tiebreakers ran 112.212% to 15.026%
2026 threshold basis limits, 2BR
LA $608,800; Orange $559,200; San Diego $545,600; Riverside/San Bernardino/Imperial $531,200
Opportunity Area basis bump gate
Requires unadjusted 9% 2BR limit at or below $500,000 — unavailable in all six covered counties in 2026
CTCAC List_of_Projects.xlsx
4.67 MB; 6,196 rows × 61 columns; 57 county sheets; carries APN and census tract
2026 CTCAC income and rent limits
All seven linked data files are PDFs; no XLSX, CSV or API; three placed-in-service vintages
Third-party report clocks
Title report 90 days; market study 180 days; CNA 180 days
Public-source drag on timeline
Each additional public funding source ≈ +4 months and +$20,460/unit (699 applications, 2020–2023)
EZFeasi screening layer today
17 signals; Riverside 841,722 parcels and San Diego 3,500 parcels loaded

Governing authority

  • Tiebreaker discount where purchase price exceeds appraised value4 CCR Section 10325(c)(9)(A), with waiver at Section 10327(c)(6)
  • Negative points for inaccurate or misleading amenity and distance certification4 CCR Section 10325(c)(2)(N)
  • Negative points assignable to Development Team members, 23 enumerated grounds4 CCR Section 10325(c)(2)
  • Acceptable forms of site control and evidence that all extensions are executed4 CCR Section 10325(f)(2)
  • Site control maintained continuously from application through carryover4 CCR Section 10328(d)(2)
  • High-cost test — staff shall not recommend a project exceeding the adjusted threshold basis limit by 30%4 CCR Section 10325(d)
  • Market study prepared or updated within 180 days of filing4 CCR Section 10322(h)(10)
  • Housing Element Annual Progress Report mandateGov. Code Section 65400
  • Transit density override cited by HQTA-derived transit tiersGov. Code Section 65912.123(b)(1)(E)
  • Streamlining site exclusion criteriaGov. Code Section 65913.4(a)(6)
  • Recodified confidentiality provision for official home addresses (frequently miscited as Gov. Code Section 6254.21)Gov. Code Section 7928.205

See this phase modeled on your own site

Book a demo and we'll walk through it live, or get a quote for your team.