Methodology · updated July 20, 2026

Facts stay facts. Inferences earn a label.

PermitProspect is a normalization and alert layer over inconsistent local data. This is the operating standard used before a record can reach search, a market page, or an alert.

01

Official sources and provenance

PermitProspect prioritizes official municipal or county open-data APIs and downloads, followed by official permitting-system exports and state aggregations. Census Building Permits Survey data can provide aggregate market context but is not used as address-level lead inventory.

Every normalized record retains a stable internal ID, source record ID, official URL, raw status and description, source timestamps, ingestion time, and source registry version. Terms, cadence, expected fields, missing fields, and display rights live with each adapter.

02

Normalization without rewriting scope

Dates become ISO values, status labels map to a small display vocabulary while preserving raw status, and location is reduced to the precision allowed by public-display policy. Casing and whitespace may be cleaned. PermitProspect does not add work that the source did not state.

Source-reported value remains separate from inferred value. The public product does not infer project cost. Missing amounts display as “not reported.”

03

Versioned, explainable trade matching

Matching runs in order: deterministic source code, normalized keywords, exclusions, then an optional bounded classifier. The shipped taxonomy is version 2026.07.1. Each result stores its rule ID, reason, confidence, version, and direct-or-adjacent kind.

A direct match explicitly names the trade. An adjacent signal names a project event that can create downstream demand. Pest control, for example, is generally adjacency—not a permit type. Weak inferences are withheld.

04

Deduplication and project clustering

Source ID plus source record ID form the first uniqueness boundary. Updated source rows create versions rather than new public URLs. Where the source exposes parent or project IDs, related trade permits can cluster under a stable project.

Jobs are idempotent and leased. A record cannot enter alert matching until fetch, validation, normalization, and deduplication complete. Failures enter quarantine with the raw payload and reason.

05

Market statistics and time periods

Counts use actual normalized records and label the period as complete or partial. A partial current month is never compared with a complete prior month without an explicit like-for-like method. One permit can contribute to multiple direct trade categories, which is stated beside category charts.

Statistics describe the records PermitProspect has successfully ingested and normalized from each official source. They are not presented as complete municipal totals.

06

Data minimization and corrections

Public display suppresses owner names, personal phones and emails, signatures, sensitive source documents, and exact coordinates by default. Location is shown at ZIP, neighborhood, or jurisdiction precision. Named parties are not interpreted as winners of work.

Correction and removal requests create an auditable ticket. PermitProspect verifies identity and scope before changing or suppressing a record; it does not auto-delete a source-derived record on an unverified request.

07

Index quality and crawl control

Permit search filters are noindex, follow and canonicalize to the main search page. Trade-by-city pages require at least three qualified records; thresholds are calibrated to sustained inventory rather than one-off matches. Sparse pages remain useful product empty states but stay out of search indexes.

Duplicate title, canonical, sparse-page, orphan-page, and robots checks run in the SEO audit. Structured data describes visible content only; no building-permit rich-result type is invented.