Search Permits
Changed onReturns a list of matching permits records. Permits should meet ALL of the parameter filters. Multiple parameters are treated as AND queries. Use contractor_classification_derived to filter by contractor's derived classifications (ALL specified values required).
Request
- Base URLhttps://api.shovels.ai/v2
- AuthAPI key in header X-API-Key
Query parameters
Return permits that started on or after the specified date.This includes all permits with the earliest date (file, issue, or start date) that falls on or after this date. Date format: YYYY-MM-DD
Return permits that started on or before the specified date.This includes all permits with the latest date (file, issue, or end date) that falls on or before this date. Date format: YYYY-MM-DD
Filter by one or more tags. Use '-' prefix to exclude tags. Example: ?permit_tags=solar&permit_tags=-roofing (has solar, not roofing).
Filter results by geographic area. Accepts:
- US state code (e.g. CA)
- ZIP code (e.g. 90210 or 90210-1234)
- Shovels geolocation ID for an address, city, county, or jurisdiction (e.g. a4xysKbZwqg)
Resolve addresses and places to geolocation IDs via:
- Search Addresses
- Search Cities
- Search Counties
- Search Jurisdictions
Free-form text such as "123 Main St" is not accepted.
Filter by contractor presence: true returns only permits with a contractor, false only permits without one. Omit to apply no filter.
Cursor for pagination
When true and on the first page (no cursor), include total_count in the response. The count is exact up to 10,000; above that, relation is 'gte'.
Search permit descriptions. Permits search uses case-insensitive substring matching, including partial words. Contractors search uses full-text search with English stemming. For example, installing matches install. Multi-word contractor queries require all words after English text processing. For example, solar panel requires both solar and panel.
Filter by one or more statuses: final, in_review, inactive, active.
Filter by the minimum permit approval duration in days.
Filter by the minimum project construction duration in days.
Filter by the minimum inspection pass rate.
Filter by the minimum job value, in cents (e.g. 5000000 = $50,000).
Filter by minimum permit fees, in cents (e.g. 5000000 = $50,000).
Filter by property type: residential, commercial, industrial, agricultural, vacant land, exempt, miscellaneous, office, recreational. Repeat the key to match any of several types (e.g. ?property_type=residential&property_type=commercial).
Minimum assessed market value of the property, in cents (e.g. 5000000 = $50,000).
Minimum total building area in sq ft.
Minimum size of the property lot in sq ft.
Minimum number of property stories.
Minimum number of property units
Filter by derived contractor classifications. Use '-' prefix to exclude. Example: ?classification_derived=electrical&classification_derived=-hvac. Returns results containing ALL specified classifications. Possible values: concrete_and_paving, demolition_and_excavation, electrical, fencing_and_glazing, framing_and_carpentry, general_building_contractor, general_engineering_contractor, hvac, landscaping_and_outdoor_work, other, plumbing, roofing, specialty_trades.
Filter by contractor's name or business name (partial match supported). Must be at least 3 characters — shorter patterns cannot use the trigram index and would force a sequential scan.
Filter by contractor's website prefix. Surrounding whitespace is trimmed and input is lowercased. Leading http://, https://, and www. prefixes and trailing slashes are removed. Paths are retained. A value that is empty after normalization applies no website filter.
Minimum lifetime job value of the contractor, in cents (e.g. 5000000 = $50,000).
Minimum lifetime permits count.
Minimum lifetime inspection pass rate. The value must be an integer between 0 and 100, inclusive.
Filter by the contractor's license
Response
A list of permits.
Changes
- breaking
for the
queryrequest parametersize, default value was changed from50to10
- breaking
- breaking
queryrequest parameterproperty_typelist-of-types was narrowed by removing typesstring - breaking
for the
queryrequest parameterproperty_type, the type of propertyanyOf[subschema #1]/was specialized fromstringtoarray - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status
- breaking