A "permit record" sounds simple, but the value is in the fields — and in whether those fields mean the same thing across every jurisdiction. Below is the normalized schema PermitData delivers, grouped by what each part tells you. Every record is one row; every column is standardized so data from different cities is directly comparable.
Identifiers & provenance
source_id— the original permit number from the issuing jurisdiction, kept for traceability.source_municipality— the city or county that issued the record.record_type/record_subtype— permit, inspection, violation, or stop-work order, plus the local sub-classification.
What kind of work
trade_category— a standardized trade such as Roofing, HVAC, Electrical, Plumbing, Solar, or New Construction. This is the field that makes cross-jurisdiction analysis possible: dozens of local labels collapse into one consistent set.description— the free-text scope of work as filed.
Where the work is happening
formatted_address,city,zip_code— the project location, geocoded where available.parcel_id_apn— the assessor's parcel number, useful for joining to property data.
When it happened
apply_date,issue_date,event_date,close_date— the permit lifecycle, normalized to ISO dates so "issued" means the same thing everywhere.current_status— a standardized status (issued, finaled, withdrawn, expired, and so on).
Who is doing it
contractor_nameandcontractor_lic_no— the licensed contractor and license number. This is what turns permit data into a contractor lead list.applicant_owner— the applicant or property owner where available.
How big it is
estimated_cost— the reported job valuation (note that some jurisdictions do not publish this; it can be blank).sq_ft,units_added,property_use— size and use signals for new construction and additions.
Why normalization matters
The hard part of permit data is not collecting it — it's making it comparable. Raw exports from two cities will disagree on column names, date formats, status vocabularies, and trade labels. PermitData deduplicates records and maps all of it to the single schema above, so you can filter roofing permits across every county in one query, or compare permit volume between jurisdictions without writing per-city special cases.
Want the full field list applied to your scope? Request a quote or preview live records in the dashboard.