Find the full portfolio of properties an owner holds
const url = 'https://app-api.landinsights.co/api/public/v1/properties/7234891/owner-portfolio/';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://app-api.landinsights.co/api/public/v1/properties/7234891/owner-portfolio/ \ --header 'Authorization: Bearer <token>'Returns every parcel held by the same owner as the given property — the owner’s full portfolio — matched on the owner’s mailing address (street plus ZIP, or street plus city and state). Works whether the owner is a person, company, or trust.
Use it to gauge how much land an owner holds and where; a large or geographically scattered portfolio can flag a motivated, multi-parcel seller.
Errors: 400 when the subject parcel has no owner mailing address to match on; 404 when the property_id does not exist.
Cost: 30 tokens, or free when the owner holds nothing beyond the subject parcel.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The property’s property_id (from property search, filter, or detail responses). Its owner’s portfolio is returned.
Examples
Sample PropertyID
7234891Responses
Section titled “ Responses ”Owner-portfolio response: portfolio totals plus every parcel the owner holds. Not paginated — the full portfolio is returned in one response.
object
The subject parcel the lookup was run for.
object
Land Insights numeric identifier for the parcel. Stable.
Direct link to view this parcel in the Land Insights web app.
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. Acreage filters use effective_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.
Parcel acreage used for acreage filtering and sorting: the assessor-reported acres when present, otherwise the polygon-measured calculated_acres. Null only when both are 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.
Total number of parcels this owner holds, including the subject parcel.
Combined acreage across the whole portfolio.
Number of distinct states the portfolio spans.
Number of distinct counties (by FIPS) the portfolio spans.
Every parcel held by the same owner, including the subject parcel, ordered by property_id.
Compact parcel record — used in search + filter results.
object
Land Insights numeric identifier for the parcel. Stable.
Direct link to view this parcel in the Land Insights web app.
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. Acreage filters use effective_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.
Parcel acreage used for acreage filtering and sorting: the assessor-reported acres when present, otherwise the polygon-measured calculated_acres. Null only when both are 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
Owner holds three parcels
{ "source_parcel": { "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, "effective_acres": 5.13, "owner_name": "SMITH JOHN", "situs_address": null, "situs_city": "SAN LUIS", "situs_state": "CO", "situs_zip": "81152" }, "total_parcels": 3, "total_acres": 20.07, "total_states": 1, "total_counties": 1, "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, "effective_acres": 5.13, "owner_name": "SMITH JOHN", "situs_address": null, "situs_city": "SAN LUIS", "situs_state": "CO", "situs_zip": "81152" }, { "property_id": 7234917, "url": "https://app.landinsights.co/data?parcel=7234917", "apn": "07111-04-007", "fips": 8023, "point": [ -105.421, 37.198 ], "acres": 5, "calculated_acres": 5.07, "effective_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, usage_backstop_reached, payment_required, validation_error, unprocessable, 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, usage_backstop_reached, payment_required, validation_error, unprocessable, 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, usage_backstop_reached, payment_required, validation_error, unprocessable, 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, usage_backstop_reached, payment_required, validation_error, unprocessable, 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, usage_backstop_reached, payment_required, validation_error, unprocessable, 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, usage_backstop_reached, payment_required, validation_error, unprocessable, 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, usage_backstop_reached, payment_required, validation_error, unprocessable, 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": {} }}