How we collect building-permit data

PermitGrab pulls permit records daily from official municipal open-data APIs — not scrapes of aggregator sites — and turns them into contractor and property-owner leads you can act on the same week.

The pipeline

  1. Source, per city. Each city is wired to a specific official feed — Socrata (SODA), ArcGIS REST, CKAN, Accela citizen-access, or a county assessor roll — with a documented field map. We never use catalog auto-discovery or stale aggregator mirrors.
  2. Collect daily. A standalone collection cron touches every active source each cycle, windowing on the source's row-publish timestamp where a feed backfills older business dates — so a permit issued weeks ago but published today is still captured.
  3. Deduplicate. Records are keyed by permit identity; a permit can't appear twice in a city page or a digest.
  4. Classify the trade. Each permit is mapped to a trade category (roofing, HVAC, electrical, solar, …) from its type, work description, and contractor signals — so a trade filter returns the right leads.
  5. Enrich, free-first. Contractor phone numbers come from license-of-record registries and a free web/OSM searcher — never paid per-record. License-of-record status ("✓ License active") is surfaced where the state board confirms it.
  6. Reconcile freshness. A nightly bookkeeping pass reconciles each city's freshness from the permit truth, and a paused-fleet hunt re-points any source that a portal moved — so a city page never silently shows stale data as current.

What we don't do

We don't fabricate contact data, we don't show homeowner names as "contractors," and we don't imply a total valuation over permits that didn't report one. If a city's source is genuinely dormant, the page says so.

See our live data-source coverage →

Start 14-Day Trial →
14-day
14-day trial