curl --request GET \
--url https://api.investorlift.com/v1/properties/resolve \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.investorlift.com/v1/properties/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.investorlift.com/v1/properties/resolve"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)Find a parcel
The parcel at a point, behind an APN or behind a street address, and the id every other endpoint takes.
curl --request GET \
--url https://api.investorlift.com/v1/properties/resolve \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.investorlift.com/v1/properties/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.investorlift.com/v1/properties/resolve"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)property_id to pass as property_id= to every other endpoint, plus the parcel block. The block carries
the address, coordinates, beds, baths, square feet, year built and pool.
Use it when
The first call of a God Mode search.- From a search box. Google Places gives you a point. Pass
latandlng, and the API returns the nearest parcel within 100 m. - From a seller record. Pass
apn(dashes optional) and, when you have it,county. The county is a name such as Maricopa, or a FIPS such as 04013. - From a street address. Pass
addresswithziporcity. The ZIP is the narrower key. The address is the street line as the county records it, “7522 E Cholla St”. The API trims a ZIP+4. A unit goes inside the line, “7522 E Cholla St Unit 2”, or inunit.
GET /v1/properties/{property_id}.
Read the response
property_id is the id to keep. candidates is empty for a point lookup, a unique APN and a unique address. Sometimes
the county recorded the same parcel under two spellings (“101-08-158B” and “101-08-158-B”). Then the row with the most
deals is the property. The response lists the other spelling with same_parcel: true, and you can ignore it.
How an address is matched
The API normalises the street line with the same function the pipeline uses on every parcel’s situs line. The normalised line has the house number, directional, street name and suffix, with punctuation and case folded. Then the API probes the address table in the ZIP or, without one, the city. An exact street key wins. Only when no parcel carries it does the API try the direction-less key. So “7522 Cholla St” still finds “7522 E Cholla St”, while an exact spelling never widens to its twins. One row resolves. Several rows, a building of units or a duplicate line in the ZIP, resolve when exactly one row’s unit matches the unit you gave. Otherwise the API answers422 ambiguous_address with up to 25 candidates[], each carrying its
unit, and truncated: true when more exist. Pick one and call the parcel route with its id, or pass unit.
Gotchas
- Pass exactly one of
lat+lng,apnoraddress. Two of them is400 geometry_conflict, and so iszip,cityorunitwithoutaddress, orcountywithoutapn. None of them is400 geometry_required. Anaddresswithoutziporcityis400 validation_error. So is a line with no house number, or a line with two house numbers (“628 & 630 W Main St”). - The API serves an address where the market has a published address table:
meta.coverage[].address_as_ofsays so, and Coverage and freshness explains it. Until then an address is422 addresses_unavailable. An address no parcel carries in the ZIP or city is a 404. - A point outside every loaded market is
422 outside_coverage. A point inside coverage with no parcel within 100 m is a 404: the difference matters, and Coverage and freshness explains it. - An APN that names different parcels is
422 ambiguous_apnwithcandidates[]in the error body. That occurs with the same APN in Maricopa and Pinal withoutcounty, or with twins more than 100 m apart. Pick one and call the parcel route with its id. - The address table carries the parts of each parcel’s situs line, never a mailing address. The API never matches an owner’s address here.
- This endpoint never returns owner information.
Related
Who owns this house?.Authorizations
API key from the developer console (starts with zpka_). Create one at https://developers.investorlift.com/get-a-key.
Query Parameters
Point latitude (with lng): the API returns the nearest parcel within 100 m. Not allowed with apn.
-90 <= x <= 90Point longitude (with lat).
-180 <= x <= 180Assessor parcel number, with or without dashes: "131-28-253" and "13128253" match the same parcel. The API ignores punctuation and case. Not allowed with lat / lng.
1 - 32Street line of a situs address as the county records it, for example "7522 E Cholla St" or "7522 E Cholla St Unit 2". The line carries the house number and the street, with the unit inside it or in unit. Needs zip or city. Not allowed with lat / lng or apn. A line without a house number, or one that names two ("628 & 630 W Main St"), is 400 validation_error. A line that names several parcels, the units of one building, is 422 ambiguous_address until unit picks one.
1 - 1205-digit ZIP of the address, for example "85257". The API reads the first five digits of a ZIP+4. Only with address. The address needs zip or city, and zip is the narrower key.
^\d{5}(-\d{4})?$City of the address, for example "Scottsdale" (case does not matter). The API reads it when zip is absent. Only with address.
1 - 64Unit designator of the address, for example "2", "# 2", "Unit 2" or "B". The API drops the designator word. It picks one unit of a building that resolves to several parcels. Only with address. A unit inside the address line does the same.
1 - 16Narrows an APN lookup to one county: a 5-digit FIPS ("04013", "48201") or the county name ("Maricopa", "Harris"). Case does not matter. Only with apn. Without it the API searches every loaded county, and an APN that exists in two counties is 422 ambiguous_apn.
1 - 64Response
The resolved parcel: property_id, the parcel block and any same-parcel spelling twins.
The resolved parcel: property_id, the parcel block and any same-parcel spelling twins.
Was this page helpful?