Skip to main content
Docs / Permit filters

Building permits

Permit filters

Every filter that permit search, count, sync, contractors, exports, alerts, and aggregate accept, with its values. The same filter names and values as the permits map.

Lead generation and business developmentAI-native analysts and MCP clientsData and PropTech platforms

Permit routes take their own filters, with the same names and values as the permits map. Anything listed here is accepted; a name or value that is not returns 400 invalid_filter with the closest one we know, and costs nothing. GET /permits/reference returns the same values with their labels, for free.

How filters combine

  • Values within one filter are an OR. trades=roofing,solar is roofing or solar. A list filter takes comma-separated values or the parameter repeated (trades=roofing&trades=solar).
  • Different filters are ANDed. cities=Provo&trades=roofing is roofing jobs in Provo.
  • states, counties, and cities are one place filter, as on the map: a permit in any of the places matches. counties=Salt%20Lake%20County&cities=Provo is permits in either. Naming one state helps us find a county or city whose name exists in more than one state.
  • workTypes and workGroups OR together, and so do propertyTypes, propertySubtypes, and assetClasses.
  • statuses and stages AND together, so send the one you need.
  • A permit that does not state a value, square footage, or unit count is left out while a filter on that number is on.
  • Send at most one of q, permitNumber, and contractor.

Aliases: ids for permitIds, placeKeys for placeKey, and the singular state, county, and city. At most 100 permitIds, 50 contractorKeys, and 20 placeKey values per request.

Defaults applied for you

A filter you leave out can still shape the answer. Every default is listed in meta.appliedDefaults, so you can check it rather than remember it.

DefaultEffectChange it
dateField=activity, dateRange=12mWith no date filter, permits with activity in the last 12 months. Sync and an alert's matches look at any date. A new alert keeps the window as a rolling one. The permits map opens on Issued, any date.dateRange=all for every date, or dateField=issued&dateRange=all to match the map.
jobKinds=major,minorMajor and minor jobs. Record-only entries (licenses, property records, and planning cases filed as permits) are left out.includeRecords=true adds them.
sort=recentNewest activity first. Order only, not which permits match.Send your own sort.
Your plan areaEvery route reads only the places your plan covers. A place wholly outside it is 403 geographic_access_denied.GET /permits/coverage shows what your plan includes.

Every filter

FilterMeaningValues
qWords in the permit: its description, the work, the address, the permit number, and the names of people and companies on the permit. Every word must appear. The permits map search box.Text
permitNumberAn exact permit number as the city prints it. Use instead of q, not with it.Text
contractorThe full name of a general contractor, builder, or trade contractor on the permit (Example Builders LLC). It matches the whole name, ignoring capital letters and extra spaces; punctuation counts. Unsure of the spelling? Find the company with GET /permits/contractors and send its contractorKeys. Use instead of q, not with it.A full company name
contractorKeysExact contractor keys: the 16-character contractorKey of each row from GET /permits/contractors (at most 50).16-character keys, one or more
statesStates by two-letter code, name, or id. Places OR together.Codes, names, or ids, one or more
countiesCounties by name or id (Utah County).Names or ids, one or more
citiesCities by name or id (Provo).Names or ids, one or more
bboxA map box west,south,east,north in degrees.west,south,east,north
workTypesWork type tags. See GET /permits/reference?facet=workTypes.Any of 35 values, listed below
workGroupsWork type groups (every tag in the group).Any of new, remodel, systems, exterior, site, planning, unspecified
constructionTypesKind of construction: new building, addition, renovation, site work, infrastructure, demolition only, or not stated.Any of new_building, addition, renovation, site_work, infrastructure, demolition_only, none, not_stated
propertyTypesBuilding Types (the same names as GET /taxonomy).Labels from GET /taxonomy, one or more
propertySubtypesBuilding subtypes.Labels from GET /taxonomy, one or more
assetClassesBuilding classes.Labels from GET /taxonomy, one or more
statusesPermit status.Any of in_review, active, final, inactive, no_construction
stagesWhere the job is, one step finer than status. Send <status>:<stage> (for example active:issued) or bucket:<status> (for example bucket:final). GET /permits/reference?facet=stages lists the stage words.Any of 100 values, listed below
whyNowWhy the permit is worth a call now (Activity signals on the permits map).Any of 9 values, listed below
tradesTrades the job involves (from the kind of work, not bids still open).Any of 26 values, listed below
sectorsPrivate or public work.Any of private, public
jobKindsMajor and minor jobs (both by default). Add includeRecords=true for record-only entries.Any of major, minor
includeRecordsAlso return record-only entries (licenses, property records, planning cases filed as permits).true or false
valueMinLowest declared job value in US dollars. Permits that state no value are left out while a value filter is on.A number
valueMaxHighest declared job value in US dollars. Permits that state no value are left out while a value filter is on.A number
valueBandsDeclared job value bands. Permits that state no value are left out while a value filter is on.Any of u10k, 10k, 50k, 250k, 1m
sqftMinSmallest square footage.A number
sqftMaxLargest square footage.A number
unitsMinFewest dwelling units.A whole number
unitsMaxMost dwelling units.A whole number
dateFieldWhich date the date filters use. Defaults to activity.One of activity, issued, applied. Default activity.
dateRangeA rolling window. With no date filter, permit routes use the last 12 months (appliedDefaults says so); sync and an alert's matches use any date. all lifts it. The permits map opens on Issued, any date: send dateField=issued&dateRange=all to match it.One of 7d, 14d, 30d, 90d, 6m, 12m, older, all. Default 12m.
dateFromEarliest date (inclusive). Replaces the default window.YYYY-MM-DD
dateToLatest date (inclusive).YYYY-MM-DD
hasCompanyContactOnly permits with a phone or email for a company on the job.true or false
hasAnyContactOnly permits with any phone or email, private individuals included.true or false
hasContractorOnly permits that name a contractor.true or false
hasInspectionsOnly permits with at least one inspection that has a result (passed, failed, or completed).true or false
detailOnlyOnly permits whose full city record was read (not just the list line).true or false
placeKeyEvery permit at these addresses (placeKey from a record, at most 20).placeKey from a record, one or more
permitIdsExact permit ids (at most 100). On count, the only filter.permitId values, one or more

Map labels and API names

The API uses the permits map's filters under names a program can send. Find the menu you use on the map, then send the parameter beside it. The second table lists the filters that have no menu on the map.

On the permits mapAPI parameterWhat to send
Search box: a keywordqWords in the permit, including the names on it.
Search box: a permit numberpermitNumberThe exact number.
Search box: an exact contractor namecontractorThe whole name, as printed.
Search box: a place, or More → Regionstates, counties, citiesNames, codes, or ids.
Work typeworkTypes, workGroupsA tag, or a whole group.
Property typepropertyTypes, propertySubtypes, assetClassesThe Building Type labels from GET /taxonomy.
Date range: Issued, Applied, or Latest activitydateField, dateRange, dateFrom, dateToThe date to filter on, then a preset or a from and to date.
StatusstatusesIn review, Active, Final, or Inactive.
Job valuevalueBands, valueMin, valueMaxA band, or your own minimum and maximum.
More → Phone or email on the permit: A companyhasCompanyContacttrue
More → Phone or email on the permit: AnyonehasAnyContacttrue. Counts private individuals, such as homeowners.
More → Names a contractorhasContractortrue
More → Construction scopeconstructionTypesNew building, addition, renovation, and so on.
More → Trades involvedtradesThe trades the work involves.
More → Units and sizeunitsMin, unitsMax, sqftMin, sqftMaxDwelling units and square feet.
More → Major or minor jobsjobKindsmajor, minor, or both.
More → Public or privatesectorsprivate, public, or both.
More → Activity signalswhyNowWhy the permit is worth a call now.
Sort menusortA sort value.
Only in the APIWhat it does
contractorKeysFrom GET /permits/contractors.
placeKeyEvery permit at one address, from a record.
permitIdsExact permits you already hold.
bboxThe map uses the visible area instead.
includeRecordsAdds record-only entries.
stagesA finer step than status.
hasInspectionsPermits with an inspection result.
detailOnlyPermits whose full city record was read.

Searching by text

  • q searches the words in a permit: its description, the work, the address, the permit number, and the names of people and companies on it. Every word must appear, and a word of 4 or more letters also matches longer words that start with it. Up to 200 characters.
  • permitNumber finds one permit number exactly as the city prints it.
  • contractor takes the full name of a general contractor, builder, or trade contractor on the permit, such as Example Builders LLC. It matches the whole name, ignoring capital letters and extra spaces; punctuation counts, so Example Builders, LLC is a different name.
  • contractorKeys is the precise way to find a company's permits. Call GET /permits/contractors with your filters, pick the rows you want, and send their contractorKey values (up to 50).
  • The API takes one q. The website's alert form can join several search terms with OR; that cannot be sent over the API yet, so run one search per term.

Allowed values

Generated from the same lists the API checks requests against. GET /permits/reference returns them with their labels; add facet= for one block, for example facet=trades. It is free.

Work types

workGroups takes a whole group; workTypes takes single tags. Sending both finds permits in either.

workGroups valueMap labelTags in the group
newNew buildingsnew_home, multifamily, adu, manufactured, new_commercial, new_other
remodelAdditions and remodelsaddition, interior_remodel, kitchen_bath, tenant_improvement, accessory, structural_repair, repair
systemsBuilding systemshvac, electrical, solar_battery, generator, plumbing, water_heater, gas, fire_protection, telecom
exteriorExterior and outdoorroofing, windows_doors, siding, pool, fence, signage
siteSite and demolitiondemolition, grading, utilities, driveway_sidewalk, septic_well
planningPlanning casesplanning
unspecifiedWork not describedunspecified
workTypes valueMap labelGroup
new_homeNew homesNew buildings
multifamilyTownhomes and multifamilyNew buildings
aduADUsNew buildings
manufacturedManufactured homesNew buildings
new_commercialCommercial and industrialNew buildings
new_otherOther new buildingsNew buildings
additionAdditionsAdditions and remodels
interior_remodelInterior remodelsAdditions and remodels
kitchen_bathKitchens and bathsAdditions and remodels
tenant_improvementTenant improvementsAdditions and remodels
accessoryGarages, decks, and shedsAdditions and remodels
structural_repairStructural and fire repairAdditions and remodels
repairOther repairsAdditions and remodels
hvacHVACBuilding systems
electricalElectricalBuilding systems
solar_batterySolar and batteriesBuilding systems
generatorGeneratorsBuilding systems
plumbingPlumbingBuilding systems
water_heaterWater heatersBuilding systems
gasGas linesBuilding systems
fire_protectionFire sprinklers and alarmsBuilding systems
telecomLow voltage and telecomBuilding systems
roofingRoofingExterior and outdoor
windows_doorsWindows and doorsExterior and outdoor
sidingSiding and exterior trimExterior and outdoor
poolPools and spasExterior and outdoor
fenceFences and wallsExterior and outdoor
signageSignsExterior and outdoor
demolitionDemolitionSite and demolition
gradingGrading and site workSite and demolition
utilitiesUtility linesSite and demolition
driveway_sidewalkDriveways, curbs, and sidewalksSite and demolition
septic_wellSeptic and wellsSite and demolition
planningZoning and land use casesPlanning cases
unspecifiedPermit doesn’t say what the work isWork not described

Trades

The trades a job involves, worked out from the kind of work. They are not bids still open.

trades valueMap labelGroup
site_workSite workSite and structure
foundationFoundationSite and structure
paving_concretePaving and concreteSite and structure
framingFramingSite and structure
roofingRoofingRoof and envelope
windows_doorsWindows and doorsRoof and envelope
siding_exteriorSiding and exteriorRoof and envelope
insulationInsulationRoof and envelope
electricalElectricalBuilding systems
plumbingPlumbingBuilding systems
hvacHVACBuilding systems
gasGasBuilding systems
fire_protectionFire protectionBuilding systems
low_voltageLow voltageBuilding systems
solarSolarBuilding systems
elevatorElevatorBuilding systems
drywallDrywallInteriors and finishes
flooringFlooringInteriors and finishes
cabinets_countertopsCabinets and countertopsInteriors and finishes
finish_carpentryFinish carpentryInteriors and finishes
paintingPaintingInteriors and finishes
appliancesAppliancesInteriors and finishes
cleaningFinal cleaningInteriors and finishes
landscapingLandscapingOutdoor
fencingFencingOutdoor
poolPoolOutdoor

Statuses and stages

statuses valueMap labelMeaning
in_reviewIn reviewFiled and waiting for approval. Contractor awards are not known from this status.
activeActiveApproved to build, or under way.
finalFinalCompleted: the final inspection passed or the certificate of occupancy was issued.
inactiveInactiveEnded without a final: expired, withdrawn, denied, void, or stopped.
no_constructionNo constructionA record with no construction work, such as a planning case, a license, or a property record.

stages is one step finer than status. Send <status>:<stage>, such as active:issued or active:under_inspection, or bucket:<status> for a whole status, such as bucket:final. The stage words are below.

Stage wordMap label
pre_applicationPre-application
appliedApplied
in_reviewIn review
needs_applicant_actionNeeds applicant info
approved_awaiting_issuanceApproved, not issued
issuedIssued
under_inspectionUnder construction
on_holdOn hold
stop_workStop work
substantially_completeNearly complete
finaledCompleted
co_issuedCompleted
closedClosed
closed_noncompliantClosed, not passed
expiredExpired
withdrawnWithdrawn
deniedDenied
void_revokedVoided
unknownStatus unknown

Activity signals

whyNow is Activity signals on the map: why the permit is worth a call now. expiring_soon and slow_review depend on today's date. Records can also carry expired_open, which shows on the record but is not a filter value.

whyNow valueMap label
rough_in_passedRough-in passed
finals_nextFinals next
issued_no_inspectionsIssued, no inspections yet
last_inspection_failedLast inspection failed
on_holdOn hold
fees_dueFees due
expiring_soonExpiring soon
slow_reviewIn review over 60 days
new_ownerNew owner

Construction types

constructionTypes valueMap label
new_buildingNew building
additionAddition
renovationRenovation
site_workSite work
infrastructureInfrastructure
demolition_onlyDemolition only
noneNo construction
not_statedWork not stated

Value bands

Bands of the declared job value. A permit with no stated value is in no band.

valueBands valueRange
u10kUnder $10k
10k$10k to $50k
50k$50k to $250k
250k$250k to $1M
1m$1M and up

Dates

dateField valueMap label
activityLatest activity
issuedIssued
appliedApplied
dateRange valueWindow
7dLast 7 days
14dLast 14 days
30dLast 30 days
90dLast 90 days
6mLast 6 months
12mLast 12 months
olderMore than a year ago
allAny date

Job kinds and sectors

FilterValueMap label
jobKindsmajorMajor jobs
jobKindsminorMinor jobs
sectorsprivatePrivate
sectorspublicPublic

Building Types

propertyTypes, propertySubtypes, and assetClasses take the Building Type labels that planned projects use, listed by GET /taxonomy. GET /permits/reference?facet=buildingTypes lists the ones present in permit data.

Sorts

sort valueLabelOrder
recentMost recent activityNewest activity first. The default.
trades_descMost trades involvedPermits that involve the most trades first.
window_ascEarliest status firstPermits earliest in their life first: in review, then active, final, and inactive, and within each status the earliest stage first (applied before issued, issued before under construction).
value_descHighest valueHighest declared job value first.
applied_descNewest applicationsNewest application date first.
issued_descRecently issuedNewest issue date first.
activity_ascOldest activity firstOldest latest activity first.
value_ascLowest valueLowest declared job value first.
applied_ascOldest applicationsOldest application date first.
issued_ascIssued longest agoOldest issue date first.

Ready to make a call?

A free Boardwalk trial includes API access, 50 record-export credits (search, CSV, MCP), and 5 Find Contact Info lookups. Counting, taxonomy, location lookups, and the analytics plane cost nothing, so you can evaluate the data before you spend a credit.