Government and Public Records

Building Permit

/extract/json

Building or construction permit record from a municipal or county permitting authority.

Download the schemagov-public-records/building-permit.json

building-permit.schema

// names marked ? are optional

permit_number:string// Official permit number. Commonly found in: city permit portal, county records.
permit_type:string// Type of permit. Commonly found in: permit portal, permit type field. One of: new_construction, addition, renovation, demolition, electrical, plumbing, mechanical, other.
permit_status:string// Current status of the permit. Commonly found in: permit portal, status field. One of: applied, approved, issued, inspected, finaled, expired, withdrawn, other.
address:string// Street address of the permitted property. Commonly found in: permit portal, property address field.
city:string// City of the permitted property. Commonly found in: permit portal.
county?:string// County of the permitted property. Commonly found in: permit portal, county records.
state:string// State of the permitted property. Commonly found in: permit portal.
zip_code?:string// ZIP code of the permitted property. Commonly found in: permit portal, property address.
latitude?:number// Latitude coordinate of the property. Commonly found in: geocoding API, GIS data.
longitude?:number// Longitude coordinate of the property. Commonly found in: geocoding API, GIS data.
parcel_number?:string// Assessor's parcel number (APN). Commonly found in: permit portal, county assessor.
project_description?:string// Description of the construction project. Commonly found in: permit portal, permit description field.
estimated_valuation_usd?:number// Estimated value of the construction work in USD. Commonly found in: permit portal, valuation field.
square_footage?:number// Square footage of the construction area. Commonly found in: permit portal, project details.
contractor_name?:string// Name of the licensed contractor. Commonly found in: permit portal, contractor section.
contractor_license_number?:string// Contractor license number. Commonly found in: permit portal, contractor section.
owner_name?:string// Name of the property owner. Commonly found in: permit portal, owner section.
application_date?:string// Date permit was applied for. Commonly found in: permit portal, dates section.
issued_date?:string// Date permit was issued. Commonly found in: permit portal, dates section.
expiry_date?:string// Date permit expires. Commonly found in: permit portal, dates section.
final_date?:string// Date permit was finaled. Commonly found in: permit portal, dates section.
page_title?:string// Title of the source page. Tabstack auto-fills this from page metadata when left empty.
favicon?:string// Favicon URL of the source page. Tabstack auto-fills this from page metadata when left empty.

Try it live

A sample Building Permit document, generated from the schema. Edit it, or paste a real response, and see it checked against the schema instantly. It runs in your browser, nothing is sent anywhere.

your-output.json
validation

Valid, matches Building Permit

Every required field is present and each value matches its type. Extra fields are allowed. A field the page does not carry is not guaranteed to come back as null, so check values rather than only checking for null.

/extract/json

Copy-paste usage

The same call in TypeScript, Python, and curl. Point it at your own URL and go. The schema drives the response, so you get back the fields you asked for instead of a page to parse.

Features

  • Typed TypeScript and Python SDKs
  • One call, no parsing code and no second LLM pass
  • The same field names on every request, even when the page layout changes
building-permit.ts
// curl -sfLO https://raw.githubusercontent.com/Mozilla-Ocho/tabstack-schemas/main/gov-public-records/building-permit.json
import Tabstack from '@tabstack/sdk'
import schema from './building-permit.json' with { type: 'json' }

const client = new Tabstack() // reads TABSTACK_API_KEY from the environment

try {
  const data = await client.extract.json({
    url: 'https://records.example.gov/filing/12345',
    json_schema: schema,
    effort: 'standard', // 'min' | 'standard' | 'max'
  })

  console.log(data)
} catch (err) {
  console.error('Extraction failed:', err)
}

Ship this schema in one call.

Pass a URL, get matching JSON back. Free to start, no extraction layer to maintain.