Methodology
How Zonloty Reports Are Generated
A detailed explanation of our research pipeline, source selection, AI analysis process, data freshness, and the known limitations of machine-generated zoning research.
Phase 1: Source Discovery
When a report is requested for a municipality, our system executes a structured series of search queries targeting eight distinct categories of zoning information:
- Zoning code & ordinances — The current municipal zoning ordinance or unified development code, typically hosted on Municode, American Legal Publishing, or the town's own website.
- Planning board activity — Recent meeting agendas, minutes, and staff reports that reveal pending amendments, active applications, and board interpretation of existing rules.
- Board of appeals records — Variance and appeal decisions, which reveal how strictly the code is interpreted and what exceptions have been granted.
- Use tables & dimensional standards — The specific permitted use tables and dimensional standards tables — setbacks, height limits, FAR, density — that define what you can build in each district.
- Overlay districts — Flood hazard, historic, aquifer, coastal, and design-review overlay districts that add requirements on top of base zoning.
- Parking & site development — Parking ratios, bicycle parking, loading requirements, signage, and landscaping standards.
- Approval processes — Site plan review, special permit, and subdivision procedures — who reviews, what's required, and typical timelines.
- Special uses — ADU rules, home occupation regulations, short-term rental policy, cannabis provisions, and other topics with dedicated code sections.
Each category generates two candidate URLs from web search. After deduplication, we collect up to 15 unique URLs for scraping in Phase 2.
Phase 2: Document Retrieval
Each candidate URL is scraped to extract the full text of the page in structured markdown format. We filter out pages with insufficient content (under 150 characters of text) and sort remaining documents by content length, prioritizing the most substantive sources.
Some URLs fail to retrieve — government PDF files, JavaScript-heavy GIS portals, or sites that block automated access. These failures are logged as warnings but don't halt the report; the pipeline continues with whatever documents were successfully retrieved.
Each retrieved document is tagged with its source URL, the category it was retrieved under, a timestamp, and any title or description metadata available from the page.
Phase 3: AI-Assisted Analysis
The retrieved documents are passed to a large language model with a structured prompt that instructs the model to synthesize the source material into a standardized report schema. The model is explicitly instructed to:
- Ground all conclusions in the source material — not general knowledge about zoning law
- Never fabricate specific zoning facts (setback distances, height limits, FAR values)
- Populate the data gaps section when source material is insufficient, rather than speculating
- Distinguish adopted law from pending proposals
- Preserve original phrasing from the source documents for dimensional values
- Note the source document that supports each material claim
The report schema is validated against a strict type definition to ensure structural completeness before storage. Reports that fail validation are not surfaced to users.
Report Structure
Every Zonloty report contains two layers:
General Zoning Analysis — factual description of the municipality's zoning framework: districts, use regulations, dimensional standards, overlay districts, parking rules, site development standards, ADU and special-use rules, nonconforming use provisions, environmental constraints, and approval processes.
Investor Intelligence — inference-based analysis of deal feasibility by project type (ADU, multifamily, mixed-use, short-term rental, etc.), approval complexity and risk, regulatory constraints, economic drivers, policy direction, and precedent patterns from board activity. These sections use cautious language to reflect that they are analytical interpretations, not determinations of legal right.
Data Freshness
Reports are generated at the time of request and cached for seven days. Subsequent requests for the same municipality within seven days return the cached report rather than triggering new research. Public town pages on Zonloty display when the report was last researched.
Zoning codes change. Amendments, rezoning petitions, overlay additions, and policy shifts can alter what a code says between our research date and the time you read it. Always verify material facts with the relevant planning department — particularly for recent changes — before making investment or development decisions.
Address Coverage Methodology
Zonloty does not treat a national environmental layer or a geocoder result as parcel-level zoning coverage. An address is eligible for a Property Intelligence Report only when the resolved zoning authority has both an active parcel source path and a base-zoning path. The zoning path may be an active zoning map layer or a zoning field that has been verified on the parcel source.
The public coverage ledger recomputes configured readiness from the active source registry. The free receipt then performs an address-specific live check: the parcel source must return a usable subject boundary and the base-zoning path must return a district for that boundary before the 2/2 purchase gate opens. A successful empty response, geographic no-coverage, and an upstream failure remain separate outcomes. Adopted-ordinance research is shown independently because a configured code source is not proof that every applicable rule was extracted. Sources are checked again during generation.
Where a reviewed municipal source is configured, the report also checks issued-permit records for the subject property. Zonloty first uses an exact parcel identifier and may use a tightly bounded address-and-proximity fallback; nearby records are discarded unless the normalized street address matches. We request only the permit fields needed for property diligence, not applicant or contractor contact details. A returned record does not prove that work was completed, inspected, code-compliant, or still exists, and no returned record is not proof that no permit or unpermitted work exists.
Municipal complaint records use a separate source contract. Inspector and contact-bearing fields are excluded, and phone or email patterns are removed from retained descriptions. A complaint is labeled as an allegation—not a violation finding—and a separate violation is shown only when the official feed publishes an explicit case reference. Open, closed, and linked records do not establish present compliance, cure, lien balance, or how a record affects a transfer.
Where reviewed planning feeds are available, zoning, site-plan, subdivision, and variance or appeal cases are queried independently. Exact assessor identifiers take priority; proximity fallback is used only when a source also publishes a subject address that exactly matches after normalization. Applicant, owner, case-manager, and contact fields are excluded. Published applications, hearings, approvals, and final dates remain separate from vested rights, current validity, approval conditions, recorded plats, permits, construction, and permission to build.
Occupancy evidence uses a separate source contract. Austin’s published “Certificate Of Occupancy” flag identifies permits for which a certificate was required; it does not establish that the certificate was issued, remains valid, covers the current use, or authorizes present occupancy. Final status and completed dates remain separate permit-system signals. Inspection results are shown only from a separately reviewed parcel-level results source and are never inferred from those permit fields.
Free coverage checks create two privacy-safe observation streams. Demand measurements retain only a normalized address’s SHA-256 hash, resolved jurisdiction, capability flags, and timestamp. Source-path measurements retain only source id, jurisdiction, parcel-or-zoning capability, outcome, latency, result count, and timestamp—never the address, coordinate, parcel id, district, owner, or user. “Recently live-verified” means both required paths returned usable evidence in an observed check within seven days; it does not guarantee the next request will succeed. These measurements are never published against raw addresses, IP addresses, or jurisdiction-level customer counts.
Known Limitations
- PDF-heavy municipalities — Many towns publish their zoning codes only as scanned PDFs that automated tools cannot fully read. Reports for these municipalities may have larger data gaps.
- Recent amendments — Zoning amendments adopted in the days or weeks before a report is generated may not yet appear in online code repositories, which can lag behind adopted ordinances.
- Permit-record boundaries — Municipal permit feeds can contain legacy gaps, delayed status updates, address inconsistencies, or records that do not establish whether permitted work was completed or remains on the property. Confirm material records with the issuing department.
- Complaint and enforcement boundaries — A complaint is an allegation, not a violation finding. Case closure does not necessarily establish compliance, and open-data records do not replace inspection-file review, municipal lien searches, or title diligence.
- Development-case boundaries — Municipal case feeds can omit proceedings, lag behind official files, or describe geography that differs from an assessor parcel. An approval or final date does not establish current entitlement validity or satisfied conditions; verify material cases with the issuing department.
- Occupancy and inspection boundaries — A certificate-required flag is not the certificate document, and a final permit status or completed date is not proof of legal occupancy or inspection acceptance. Confirm the approved use, certificate validity, conditions, corrections, reinspections, and current applicability with the issuing department.
- Informal interpretations — Planning departments sometimes apply rules informally in ways that differ from the written code. Our reports reflect the written code, not undocumented administrative practice.
- Very small municipalities — Towns with minimal online presence may have insufficient public source material to support a complete report. In these cases, the data gaps section will be more extensive.
- No legal advice — Zonloty reports are research tools. They do not constitute legal advice and are not a substitute for review by a licensed land-use attorney on a specific project.
Corrections and Source Conflicts
Every report can be challenged with a specific claim and supporting source. We review the cited provision, table notes, effective date, and any conflicting official material. A supported correction changes the affected report or generation rule; unresolved conflicts remain disclosed rather than being silently treated as settled.
Submit a source-backed correction →