Search

Search parcels

Search parcels with optional geographic bounds and attribute filters. bounds and filters are both optional (filters defaults to {}); the body is validated and any bad member is a 400 naming it. sort applies to UNBOUNDED queries only: with bounds, rows come back in spatial-index order and the response says sort_applied: false. total is the exact number of matching parcels up to 10,000; beyond that it is 10,000 with total_is_lower_bound: true, and it is null if the count timed out (total_status: "timed_out"). Traffic-count columns are withheld until verified: they are returned as null with a withhold_gate block, and filters on them (minVpd, maxVpd, minVisibilityScore) are refused with 400 filter_withheld.

post/api/v1/search

Request

  • Base URL: https://propraven.com
  • URL: https://propraven.com/api/v1/search
  • Auth: HTTP bearer

Request body

sort'assessed_value' | 'sale_price' | 'acreage' | 'year_built' | 'deal_score' | 'address' | 'city' | 'state' | 'owner_name' | 'total_assessed_value' | 'zoning' | 'lot_size_acres' | 'ownership_type'

Sort field (unbounded queries only). The first five are the primary names; the rest are accepted column names. A legacy {field, direction} object is also accepted.

order'asc' | 'desc'
limitinteger

Page size. Values above 500 are clamped to 500 (the response echoes the effective limit).

offsetinteger

Example request

{
  "bounds": {
    "north": 35.85,
    "south": 35.75,
    "east": -78.55,
    "west": -78.7
  },
  "filters": {
    "zoningCategories": [
      "Residential",
      "Commercial"
    ],
    "floodZone": "AE",
    "valueRange": {
      "min": 100000,
      "max": 500000
    },
    "yearBuiltRange": {
      "min": 1990,
      "max": 2024
    },
    "acreageRange": {
      "min": 0.5,
      "max": 10
    }
  },
  "sort": "assessed_value"
}

Response

Search results returned.

totalinteger required

Exact matching count up to 10,000; 10,000 when capped; null when the count timed out.

total_is_estimateboolean required

True only when total is capped (a lower bound).

total_is_lower_boundboolean required
has_moreboolean required
limitinteger required
offsetinteger required
sort_appliedboolean required

False when bounds was given (sort is not applied to bounded queries) or no sort was requested.

total_status'timed_out'

Present when the count did not finish.

zoning_categories_appliedstring[]
zoning_categories_unrecognizedstring[]
zoning_unknown_estimateinteger nullable
zoning_unknown_is_estimateboolean
zoning_filter_notestring

Example response

{
  "total": 37,
  "limit": 100
}

Changes

No recorded changes to this operation across all 1 revision of this API.