Search properties by APN or owner name
const url = 'https://example.com/api/public/v1/properties/search/?apn=07111-04-006&fips=8023&owner_name=SMITH&page=1&page_size=25';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://example.com/api/public/v1/properties/search/?apn=07111-04-006&fips=8023&owner_name=SMITH&page=1&page_size=25' \ --header 'Authorization: Bearer <token>'Returns properties matching the given filters within the specified county FIPS, paginated. Either apn or owner_name is required.
Owner-name matching is a case-insensitive substring search on the primary owner; multiple whitespace-separated tokens are AND-ed.
Returns a paginated envelope: count (total matches), next / previous (page URLs or null), and results (one summary per parcel). Default page_size is 25, max 100.
Cost: 10 tokens per search. Empty results (0 matches) cost 0 tokens. Cost is flat regardless of page size.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Assessor’s Parcel Number. Exact match. Either apn or owner_name is required.
Examples
07111-04-006Required. 5-digit county FIPS code to search within. Searches are scoped to a single county.
Examples
Costilla County, CO
8023Luna County, NM
35029Hudspeth County, TX
48229Park County, WY
56029Owner-name substring (case-insensitive). Either apn or owner_name is required.
Examples
Single token
SMITHMultiple tokens (AND-ed)
SMITH JOHNPage number (1-indexed).
Results per page. Max 100.
Responses
Section titled “ Responses ”Paginated envelope for endpoints returning a list of parcel summaries.
Shared by the parcel-filter and property-search responses.
object
Total number of parcels matching the query (across all pages).
URL of the next page of results, or null on the last page.
URL of the previous page, or null on the first page.
Compact parcel record — used in search + filter results.
object
Land Insights numeric identifier for the parcel. Stable.
Assessor’s Parcel Number — the county-assigned property identifier.
5-digit county FIPS code (2-digit state FIPS + 3-digit county FIPS).
Geographic centroid (point-on-surface) of the parcel as [longitude, latitude] in WGS84 (EPSG:4326). May be null if geometry is unavailable.
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.
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.
Full name of the primary owner of record (raw string from assessor; typically uppercase, may include corporate suffixes like ‘LLC’).
Physical street address of the parcel (situs).
Situs city.
Situs two-letter US state code.
Situs 5-digit ZIP code.
Examples
Two matches
{ "count": 2, "next": null, "previous": null, "results": [ { "property_id": 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" }, { "property_id": 7234917, "apn": "07111-04-007", "fips": 8023, "point": [ -105.421, 37.198 ], "acres": 5, "calculated_acres": 5.07, "owner_name": "SMITH JOHN", "situs_address": null, "situs_city": "SAN LUIS", "situs_state": "CO", "situs_zip": "81152" } ]}Validation error.
object
object
Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, validation_error, not_found, method_not_allowed, rate_limited, internal_error.
Human-readable description of the error.
Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.
Present on validation errors only: maps each rejected field to its list of messages.
object
Example generated
{ "error": { "code": "example", "message": "example", "request_id": "example", "details": {} }}Missing or invalid credentials.
object
object
Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, validation_error, not_found, method_not_allowed, rate_limited, internal_error.
Human-readable description of the error.
Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.
Present on validation errors only: maps each rejected field to its list of messages.
object
Example generated
{ "error": { "code": "example", "message": "example", "request_id": "example", "details": {} }}A Pro subscription or higher API tier is required.
object
object
Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, validation_error, not_found, method_not_allowed, rate_limited, internal_error.
Human-readable description of the error.
Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.
Present on validation errors only: maps each rejected field to its list of messages.
object
Example generated
{ "error": { "code": "example", "message": "example", "request_id": "example", "details": {} }}Authenticated but not permitted.
object
object
Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, validation_error, not_found, method_not_allowed, rate_limited, internal_error.
Human-readable description of the error.
Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.
Present on validation errors only: maps each rejected field to its list of messages.
object
Example generated
{ "error": { "code": "example", "message": "example", "request_id": "example", "details": {} }}Resource not found.
object
object
Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, validation_error, not_found, method_not_allowed, rate_limited, internal_error.
Human-readable description of the error.
Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.
Present on validation errors only: maps each rejected field to its list of messages.
object
Example generated
{ "error": { "code": "example", "message": "example", "request_id": "example", "details": {} }}Rate limit exceeded.
object
object
Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, validation_error, not_found, method_not_allowed, rate_limited, internal_error.
Human-readable description of the error.
Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.
Present on validation errors only: maps each rejected field to its list of messages.
object
Example generated
{ "error": { "code": "example", "message": "example", "request_id": "example", "details": {} }}Internal error.
object
object
Stable machine-readable error code. One of: unauthorized, forbidden, subscription_required, tier_upgrade_required, usage_limit_exceeded, validation_error, not_found, method_not_allowed, rate_limited, internal_error.
Human-readable description of the error.
Echoes the request’s X-Request-Id (or a server-issued id). Quote it in support requests.
Present on validation errors only: maps each rejected field to its list of messages.
object
Example generated
{ "error": { "code": "example", "message": "example", "request_id": "example", "details": {} }}