Data dictionary
Every column, defined.
The same schema for every county, state and the nationwide file, in CSV, Excel or Parquet. How complete each column is varies by department — every coverage page shows it.
| Column | Type | Description |
|---|---|---|
permit_numberPermit number | text | The permit or case number as issued by the building department. |
permit_typePermit type | text | The department’s own classification — e.g. Residential Electrical, Roofing, Solar, New Construction, Demolition. |
work_descriptionWork description | text | Free-text description of the permitted work, as written on the application. |
permit_statusStatus | text | Lifecycle status as reported by the source: applied, issued, finaled, expired, withdrawn … |
application_dateApplication date | date | Date the permit application was filed. |
issue_dateIssue date | date | Date the permit was issued. |
complete_dateCompletion date | date | Date of final inspection, certificate of occupancy, or close-out. |
expiration_dateExpiration date | date | Date the permit expires or expired. |
valuationJob value | numeric (USD) | Declared cost or valuation of the work. |
contractorContractor | text | Contractor or applicant of record. |
addressSite address | text | Street address of the permitted work. |
parcel_idParcel identifier | text | The parcel / tax-map identifier recorded with the permit, for joining to parcel and assessment data. |
parcel_id_kindParcel identifier kind | enum | What parcel_id holds: tax_account, parcel_number, account_alt, geo (a GIS feature id), address (no id, address only) or none. |
locality_geoidLocality FIPS | text (5) | Census FIPS code of the county or independent city. |
locality_nameLocality | text | County or independent-city name. |
historicalHistorical | boolean | True when the record comes from the department’s archive or historical feed rather than its current one. |
sourceSource | text | The building-department dataset the record was collected from. |
rawOriginal record | JSON | The untouched source record, every original field included — nothing the department published is dropped. |
fetched_atCollected at | timestamp | When the record was last collected from the source. |
parcel_id_kindWhat the parcel key is.
tax_accountTax account- The assessor’s tax account or real-estate account number.
parcel_numberParcel number- A parcel / tax-map number (PIN, APN, GPIN, map-lot).
account_altAlternate account- A secondary account number the department uses for the property.
geoGIS feature id- The id of a GIS feature (often the parcel polygon’s object id) the permit is attached to.
addressAddress only- No parcel id was recorded; the site address is the only key.
noneNone- Neither a parcel id nor a usable address was recorded.
How the file is built.
Department vocabulary, kept verbatim
permit_type and permit_status are exactly what the department recorded — “NHC Residential Electrical”, “B-CONVERT”, “Final”. Nothing is collapsed into a house taxonomy that could hide what the source meant; the original record is alongside if you need any field we do not normalize.
Rows and permits
Where a department publishes the same permit in more than one dataset (a current feed and an archive, say), the file carries one row per source record and the coverage pages count each permit number once.
Dates are dates
Every date column is an ISO date (YYYY-MM-DD), parsed from whatever the source used — epoch milliseconds, US-style strings, Excel serials.
Subscription files roll forward
Each monthly subscription file holds every permit dated in the trailing 12 months — the whole window, not a diff — so loading it is a replace. Status changes on permits still in the window are applied.