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
- 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.
- 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.
- Deduplicate. Records are keyed by permit identity; a permit can't appear twice in a city page or a digest.
- 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.
- 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.
- 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 →