Skip to content

Filter parcels by criteria

POST
/api/public/v1/properties/filter/
curl --request POST \
--url https://app-api.landinsights.co/api/public/v1/properties/filter/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "counties": [ 8023 ], "acres_min": 1, "acres_max": 10, "structure_count_max": 0 }'

Search parcels using a curated subset of the in-app parcel filter. POST body is the filter spec (see PublicParcelFilterRequest).

At least one of county, counties, zips_include, or geom_intersects is required to scope the search.

Returns a paginated envelope: count (total matches), next / previous (page URLs or null), and results (one summary per parcel).

Cost: 30 tokens per search. Empty results (count = 0) cost 0 tokens.

Media type application/json

The in-app parcel filter exposed on the public API.

Mirrors the private parcel-search filter set, minus the options that are export settings (which cost credits) rather than parcel filters — i.e. no deduplication, skip tracing, SellerIQ lead scoring, AI market valuation, or KML generation.

All fields are optional individually, but at least one scope filter must be present: county, counties, zips_include, geom_intersects, or owner_parcel_id. Range filters use <name>_min / <name>_max pairs; either bound may be supplied on its own.

object
geom_intersects

WKT geometry (e.g. a polygon) — restrict to parcels intersecting it. A valid scope filter on its own.

string
>= 1 characters
county

Single 5-digit county FIPS to restrict to.

string
>= 1 characters <= 5 characters
counties

List of 5-digit county FIPS codes (OR-ed).

Array<string>
state

Two-letter US state code.

string
>= 1 characters <= 2 characters
zips_include

Restrict to parcels in these 5-digit ZIP codes.

Array<string>
zips_exclude

Exclude parcels in these 5-digit ZIP codes.

Array<string>
apn

Assessor’s Parcel Number (normalized, exact match).

string
>= 1 characters
property_id

Land Insights numeric parcel identifier.

integer
subdivision

List of subdivision names to include (OR-ed).

Array<string>
zoning

List of zoning codes to include (OR-ed). County-specific values.

Array<string>
land_use

List of land-use codes to include (OR-ed).

Array<string>
school_district

Restrict to a single school-district name.

string
>= 1 characters
acres_min

Minimum parcel acreage (inclusive).

number format: double
acres_max

Maximum parcel acreage (inclusive).

number format: double
sq_ft_min

Minimum total building square footage.

integer
sq_ft_max

Maximum total building square footage.

integer
structure_count_min

Minimum number of structures on the parcel.

integer
structure_count_max

Maximum number of structures on the parcel.

integer
year_built_min

Earliest year built for any structure.

integer
year_built_max

Latest year built for any structure.

integer
improvement_percentage_min

Minimum improvement value as a percentage of total value.

number format: double
improvement_percentage_max

Maximum improvement value as a percentage of total value.

number format: double
assessed_total_value_min

Minimum assessed total value, in whole US dollars.

integer
assessed_total_value_max

Maximum assessed total value, in whole US dollars.

integer
assessed_land_value_min

Minimum assessed land value, in whole US dollars.

integer
assessed_land_value_max

Maximum assessed land value, in whole US dollars.

integer
assessed_improvement_value_min

Minimum assessed improvement value, in whole US dollars.

integer
assessed_improvement_value_max

Maximum assessed improvement value, in whole US dollars.

integer
market_total_value_min

Minimum assessor market total value, in whole USD.

integer
market_total_value_max

Maximum assessor market total value, in whole USD.

integer
market_land_value_min

Minimum assessor market land value, in whole USD.

integer
market_land_value_max

Maximum assessor market land value, in whole USD.

integer
market_improvement_value_min

Minimum assessor market improvement value, in whole USD.

integer
market_improvement_value_max

Maximum assessor market improvement value, in whole USD.

integer
delinquent_since_years_ago

Only return parcels delinquent since at least this many years ago (e.g. 2 → delinquent since 2 or more years ago).

integer
is_delinquent

If true, only return parcels currently flagged as tax-delinquent.

boolean
current_sale_price_min

Minimum most-recent sale price, in whole USD.

integer
current_sale_price_max

Maximum most-recent sale price, in whole USD.

integer
current_sale_price_code

List of sale-price codes to include (OR-ed).

Array<string>
current_sale_recording_date_min

Earliest most-recent-sale recording date (YYYYMMDD).

string
>= 1 characters
current_sale_recording_date_max

Latest most-recent-sale recording date (YYYYMMDD).

string
>= 1 characters
current_sale_seller1_full_name

Match parcels whose most-recent seller name contains any of these.

Array<string>
current_sale_document_type

List of deed/document-type codes to include (OR-ed).

Array<string>
concurrent_mtg1_loan_amt_min

Minimum first-mortgage loan amount, in whole USD.

integer
concurrent_mtg1_loan_amt_max

Maximum first-mortgage loan amount, in whole USD.

integer
concurrent_mtg1_recording_date_min

Earliest first-mortgage recording date (YYYYMMDD).

string
>= 1 characters
concurrent_mtg1_recording_date_max

Latest first-mortgage recording date (YYYYMMDD).

string
>= 1 characters
concurrent_mtg1_type_financing

List of first-mortgage financing-type codes to include (OR-ed).

Array<string>
concurrent_mtg1_loan_type

List of first-mortgage loan-type codes to include (OR-ed).

Array<string>
concurrent_mtg1_interest_rate_min

Minimum first-mortgage interest rate (%).

number format: double
concurrent_mtg1_interest_rate_max

Maximum first-mortgage interest rate (%).

number format: double
out_of_state_owner

If true, only return parcels whose owner’s mailing address is in a different state than the parcel.

boolean
out_of_county_owner

If true, only return parcels whose owner’s mailing address is in a different county than the parcel.

boolean
out_of_zip_owner

If true, only return parcels whose owner’s mailing ZIP differs from the parcel’s.

boolean
exclude_corp_owner

If true, exclude parcels owned by corporate entities (LLCs, INC, etc.).

boolean
exclude_hoa

If true, exclude parcels owned by Homeowners Associations.

boolean
owner_occupied

‘Y’ for owner-occupied only; ‘N’ for non-owner-occupied (excludes ‘Y’).

string
>= 1 characters
ownership_length_min

Minimum ownership length, in months (since last recording).

integer
ownership_length_max

Maximum ownership length, in months.

integer
inter_family_flag

If true, only parcels whose last transfer was inter-family.

boolean
exclude_keywords

Exclude parcels whose owner name contains any of these words.

Array<string>
include_keywords

Only parcels whose owner name contains any of these words.

Array<string>
owner1_exact

Exact match on the primary owner’s full name.

string
>= 1 characters
owner2_exact

Exact match on the secondary owner’s full name.

string
>= 1 characters
owner_parcel_id

Return the owner portfolio for this parcel — every parcel sharing its owner’s mailing address. A valid scope filter on its own.

integer
ai_vacant

If true, only parcels that appear vacant (no detected structure).

boolean
ai_bad_slope

If true, exclude parcels that are predominantly steeply sloped.

boolean
remove_land_locked

If true, exclude landlocked parcels.

boolean
only_land_locked

If true, only return landlocked parcels.

boolean
wetlands_allowed

Maximum allowed percentage of parcel area overlapping wetlands.

integer
flood_zone_allowed

Maximum allowed percentage of parcel area within a flood zone.

integer
road_frontage_min

Minimum road frontage, in feet.

integer
road_frontage_max

Maximum road frontage, in feet.

integer
include_highways

When measuring road frontage, count major-highway frontage.

boolean
include_normal_roads

When measuring road frontage, count normal-road frontage.

boolean
include_local_roads

When measuring road frontage, count local-road frontage.

boolean
slope_area_index

Slope-category index (0–10); paired with slope_area_percent to cap the share of parcel area steeper than this category.

integer
slope_area_percent

Maximum percentage of parcel area allowed to be steeper than slope_area_index.

integer
Examples

Vacant 1–10 acre parcels in a rural county

{
"counties": [
8023
],
"acres_min": 1,
"acres_max": 10,
"structure_count_max": 0
}
Media type application/json

Paginated envelope for endpoints returning a list of parcel summaries.

Shared by the parcel-filter and property-search responses.

object
count
required

Total number of parcels matching the query (across all pages).

integer
next

URL of the next page of results, or null on the last page.

string
nullable
previous

URL of the previous page, or null on the first page.

string
nullable
results
required
Array<object>

Compact parcel record — used in search + filter results.

object
property_id
required

Land Insights numeric identifier for the parcel. Stable.

integer
url
required

Direct link to view this parcel in the Land Insights web app.

string
apn
required

Assessor’s Parcel Number — the county-assigned property identifier.

string
nullable
fips
required

5-digit county FIPS code (2-digit state FIPS + 3-digit county FIPS).

string
nullable
point
required

Geographic centroid (point-on-surface) of the parcel as [longitude, latitude] in WGS84 (EPSG:4326). May be null if geometry is unavailable.

Array<number>
nullable >= 2 characters <= 2 characters
acres
required

Parcel acreage as reported by the county assessor (source field LotSizeAcres). This is the authoritative legal/recorded acreage. For the acreage measured from the parcel polygon, see calculated_acres.

number format: double
nullable
calculated_acres
required

Parcel acreage computed from the parcel geometry (source field CalculatedAcres): the GIS area of the polygon in acres, rounded to two decimals. May differ from the assessor-reported acres due to surveying or geometry differences, and is null when geometry is unavailable.

number format: double
nullable
owner_name
required

Full name of the primary owner of record (raw string from assessor; typically uppercase, may include corporate suffixes like ‘LLC’).

string
nullable
situs_address
required

Physical street address of the parcel (situs).

string
nullable
situs_city
required

Situs city.

string
nullable
situs_state
required

Situs two-letter US state code.

string
nullable
situs_zip
required

Situs 5-digit ZIP code.

string
nullable
Examples
Example Two-resultPage

Two-result page

{
"count": 87,
"next": "https://api.landinsights.com/api/public/v1/properties/filter/?page=2",
"previous": null,
"results": [
{
"property_id": 7234891,
"url": "https://app.landinsights.co/data?parcel=7234891",
"apn": "07111-04-006",
"fips": 8023,
"point": [
-105.42,
37.2
],
"acres": 5,
"calculated_acres": 5.13,
"owner_name": "SMITH JOHN",
"situs_address": null,
"situs_city": "SAN LUIS",
"situs_state": "CO",
"situs_zip": "81152"
}
]
}

Validation error.

Media type application/json
object
error
required
object
code
required

Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, payment_required, validation_error, not_found, method_not_allowed, rate_limited, internal_error.

string
message
required

Human-readable description of the error.

string
request_id
required

Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.

string
details

Present on validation errors only: maps each rejected field to its list of messages.

object
key
additional properties
any
Example generated
{
"error": {
"code": "example",
"message": "example",
"request_id": "example",
"details": {}
}
}

Missing or invalid credentials.

Media type application/json
object
error
required
object
code
required

Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, payment_required, validation_error, not_found, method_not_allowed, rate_limited, internal_error.

string
message
required

Human-readable description of the error.

string
request_id
required

Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.

string
details

Present on validation errors only: maps each rejected field to its list of messages.

object
key
additional properties
any
Example generated
{
"error": {
"code": "example",
"message": "example",
"request_id": "example",
"details": {}
}
}

A Pro subscription or higher API tier is required.

Media type application/json
object
error
required
object
code
required

Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, payment_required, validation_error, not_found, method_not_allowed, rate_limited, internal_error.

string
message
required

Human-readable description of the error.

string
request_id
required

Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.

string
details

Present on validation errors only: maps each rejected field to its list of messages.

object
key
additional properties
any
Example generated
{
"error": {
"code": "example",
"message": "example",
"request_id": "example",
"details": {}
}
}

Authenticated but not permitted.

Media type application/json
object
error
required
object
code
required

Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, payment_required, validation_error, not_found, method_not_allowed, rate_limited, internal_error.

string
message
required

Human-readable description of the error.

string
request_id
required

Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.

string
details

Present on validation errors only: maps each rejected field to its list of messages.

object
key
additional properties
any
Example generated
{
"error": {
"code": "example",
"message": "example",
"request_id": "example",
"details": {}
}
}

Resource not found.

Media type application/json
object
error
required
object
code
required

Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, payment_required, validation_error, not_found, method_not_allowed, rate_limited, internal_error.

string
message
required

Human-readable description of the error.

string
request_id
required

Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.

string
details

Present on validation errors only: maps each rejected field to its list of messages.

object
key
additional properties
any
Example generated
{
"error": {
"code": "example",
"message": "example",
"request_id": "example",
"details": {}
}
}

Rate limit exceeded.

Media type application/json
object
error
required
object
code
required

Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, payment_required, validation_error, not_found, method_not_allowed, rate_limited, internal_error.

string
message
required

Human-readable description of the error.

string
request_id
required

Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.

string
details

Present on validation errors only: maps each rejected field to its list of messages.

object
key
additional properties
any
Example generated
{
"error": {
"code": "example",
"message": "example",
"request_id": "example",
"details": {}
}
}

Internal error.

Media type application/json
object
error
required
object
code
required

Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, payment_required, validation_error, not_found, method_not_allowed, rate_limited, internal_error.

string
message
required

Human-readable description of the error.

string
request_id
required

Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.

string
details

Present on validation errors only: maps each rejected field to its list of messages.

object
key
additional properties
any
Example generated
{
"error": {
"code": "example",
"message": "example",
"request_id": "example",
"details": {}
}
}