{
"id": "<string>",
"market": "<string>",
"apn": "<string>",
"apn_norm": "<string>",
"county_fips": "<string>",
"address_short": "<string>",
"street_no_unit": "<string>",
"unit": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"latitude": 0,
"longitude": 0,
"bedrooms": 0,
"bathrooms": 123,
"sqft": 0,
"year_built": 0,
"pool": true,
"pool_type": "<string>",
"owner": {
"owner_occupied": true,
"absentee": true,
"is_trust": true,
"is_public": true,
"held_since": "<string>",
"months_held": 123,
"last_purchase": {
"date": "<string>",
"price": 0
},
"rental_registered": true,
"permits_last_24m": 0,
"permits_reno_last_24m": 0
},
"listing": {
"status_raw": "<string>",
"is_rental": true,
"on_market": true,
"counted": true,
"list_price": 0,
"price_low": 0,
"price_low_on": "<string>",
"price_high": 0,
"price_high_on": "<string>",
"listed_on": "<string>",
"status_updated_on": "<string>",
"off_market_on": "<string>",
"sold_on": "<string>",
"sold_price": 0,
"days_on_market": 0,
"list_to_bought_ratio": 123,
"mls_number": "<string>",
"brokerage_name": "<string>",
"agents": [
{
"role": "<string>",
"agent_id": "<string>",
"agent_is_holder_member": true
}
]
},
"short_term_rental": {
"coverage": {
"jurisdiction": "<string>",
"served": true,
"licence_start": "<string>",
"feed_stale": true
},
"active_permits": 0,
"multi_unit": true,
"building": true,
"first_application": "<string>",
"current_application": "<string>",
"licensed_since": "<string>",
"expires_on": "<string>",
"permit_after_purchase": true,
"days_purchase_to_permit": 0,
"owner_attributed": true,
"business_use": true,
"prior_owner_permit": true,
"manager": "<string>",
"signals": [
"<string>"
],
"data_as_of": "<string>"
},
"deals": [
{
"id": "<string>",
"market": "<string>",
"ownership_confirmed": true,
"property": {
"id": "<string>",
"market": "<string>",
"apn": "<string>",
"apn_norm": "<string>",
"county_fips": "<string>",
"address_short": "<string>",
"street_no_unit": "<string>",
"unit": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"latitude": 0,
"longitude": 0,
"bedrooms": 0,
"bathrooms": 123,
"sqft": 0,
"year_built": 0,
"pool": true
},
"distance_miles": 123,
"bought_on": "<string>",
"bought_price": 0,
"sold_on": "<string>",
"sold_price": 0,
"hold_days": 0,
"gross_profit": 0,
"spread_ratio": 123,
"days_held_to_data_end": 0,
"sold_to_wholesaler": true,
"round_trip": true,
"is_purchase_event": true,
"n_parcels_in_event": 0,
"bought_from_wholesaler": true,
"wholesaler_investor_id": "<string>",
"bought_from_investor": true,
"bought_distressed": true,
"investor": {
"id": "<string>",
"market": "<string>",
"name": "<string>",
"display_name": "<string>",
"state": "<string>",
"institutional": true,
"is_public": true,
"last_bought_on": "<string>",
"n_deals": 0
},
"seller": {
"id": "<string>",
"name": "<string>",
"display_name": "<string>",
"kinds": []
},
"end_buyer": {
"id": "<string>",
"name": "<string>",
"display_name": "<string>",
"kinds": []
},
"owner": {
"is_trust": true,
"is_public": true,
"owner_occupied": true,
"absentee": true,
"rental_registered": true,
"held_since": "<string>",
"months_held": 123,
"permits_last_24m": 0
},
"listing": {
"status_raw": "<string>",
"is_rental": true,
"on_market": true,
"counted": true,
"list_price": 0,
"price_low": 0,
"price_low_on": "<string>",
"price_high": 0,
"price_high_on": "<string>",
"listed_on": "<string>",
"status_updated_on": "<string>",
"off_market_on": "<string>",
"sold_on": "<string>",
"sold_price": 0,
"days_on_market": 0,
"list_to_bought_ratio": 123,
"mls_number": "<string>",
"brokerage_name": "<string>",
"agents": [
{
"role": "<string>",
"agent_id": "<string>",
"agent_is_holder_member": true
}
]
},
"short_term_rental": {
"coverage": {
"jurisdiction": "<string>",
"served": true,
"licence_start": "<string>",
"feed_stale": true
},
"active_permits": 0,
"multi_unit": true,
"building": true,
"first_application": "<string>",
"current_application": "<string>",
"licensed_since": "<string>",
"expires_on": "<string>",
"permit_after_purchase": true,
"days_purchase_to_permit": 0,
"owner_attributed": true,
"business_use": true,
"prior_owner_permit": true,
"manager": "<string>",
"signals": [
"<string>"
],
"data_as_of": "<string>"
},
"wholesale_listing": {
"id": "<string>",
"wholesaler": {
"id": "<string>",
"name": "<string>"
},
"listed_on": "<string>",
"asking_price": 0,
"days_listed_to_deed": 0
},
"financing": {
"purchase_loan": {
"id": "<string>",
"name": "<string>",
"is_hard_money": true,
"amount": 0,
"recording_date": "<string>",
"loan_to_price": 123,
"property_id": "<string>"
},
"secondary_loans_n": 0,
"as_of": "<string>",
"dated": true
}
}
],
"wholesale_listings": [
{
"id": "<string>",
"wholesaler": {
"id": "<string>",
"name": "<string>"
},
"listed_on": "<string>",
"outcome_text": "<string>"
}
]
}The Property object
One parcel: its facts, its owner, its listing, its short-term rental licence and every deal on it.
prop_ plus 32 hex characters. Find one from a point, an APN or a street address with
GET /v1/properties/resolve. Then read it with
GET /v1/properties/{property_id}.
The parcel facts come from the assessor roll, and the API serves them to every key. The facts are the segment, the
beds, the baths, the square feet, the year built, the pool and the lot size.
When the owner is named
Read this part carefully. The API finds investors and city-registered rental businesses. It is not a people-search tool.owner.names and owner.mailing exist in exactly two cases. On this host they come back null with
contact_redacted: true in both cases. So what the cases decide for you is redacted_reason. The cases are:
- The parcel is a confirmed holding of a registry investor.
- The city registered the current owner as the operator of a short-term rental business there, by a date or a
name.
short_term_rental.business_useis then true, with anattribution_basisofPURCHASE_DATE,OWNER_NAMEorLICENCE_START.
names: null with a redacted_reason. For an ordinary household the reason is
not_an_investor_hold, and that is deliberate. Three other cases keep the licence facts and lose the identity. They
are a prior owner’s permit, an owner-occupied home with a casita permit, and a licence attributed only by assumption
(attribution_basis: "ASSUMED").
The API always serves the owner facts that identify nobody: owner-occupied or absentee, a trust, how long held,
rental-registered.
The side blocks
| Block | What it is | Null when |
|---|---|---|
deals[] | Every deal on this parcel, newest first. | Never. An empty list means no investor deal on record. |
listing | The MLS listing as the feed last saw it, with its agents. | The market has no published listing tables (meta.coverage[].listings_data_end is null). |
short_term_rental | The city’s licence record for this parcel. | The parcel is outside every loaded city, or the market has no published short-term rental tables. |
wholesale_listings[] | Investorlift listings on this parcel. | The market has no published wholesale tables. |
status: "NONE" means the market has the roll, and the parcel is not on it. See
Coverage and freshness.One parcel with its owner facts, its short-term rental licence, its deal history and its Investorlift listings.
Parcel id, prop_ followed by 32 hex characters: pass it to /v1/properties/{property_id} or as property_id geometry.
^prop_[0-9a-f]{32}$Market code the parcel belongs to, for example phx. The loaded markets are in meta.coverage[].
Assessor parcel number as recorded, for example "131-28-253". Null when the county did not supply one.
APN with punctuation removed, upper case, for example "13128253": the lookup key for /v1/properties/resolve.
County FIPS, 5 digits, for example 04013 Maricopa, 04021 Pinal or 48201 Harris.
Situs street address in title case including the unit, for example "7522 E Cholla St".
The street address without the unit.
Unit designation, for example "UNIT 8". Null for most parcels.
City, upper case.
2-letter state.
5-digit ZIP.
WGS84 latitude of the centre of the parcel. Null when the parcel has no coordinates.
-90 <= x <= 90WGS84 longitude of the centre of the parcel. Null when the parcel has no coordinates.
-180 <= x <= 180Parcel segment: SFR, CONDO_TH (condo or townhouse) or OTHER (manufactured, multi-family, land, commercial). Null when the assessor use code is unknown.
SFR, CONDO_TH, OTHER Bedrooms per the assessor. Null when the assessor did not report them.
-9007199254740991 <= x <= 9007199254740991Bathrooms per the assessor. The value can be fractional, for example 2.5. Null when the assessor did not report them.
Living area in square feet. Null when the assessor did not report it.
-9007199254740991 <= x <= 9007199254740991Year built. Null when the assessor did not report it.
-9007199254740991 <= x <= 9007199254740991True for a private pool, false for community pool or spa only, null when the assessor did not report it (most parcels).
Pool detail as the assessor wrote it, for example Pool - Yes. Null when the assessor did not report it (most parcels).
Who holds the parcel at the deed data end date (meta.coverage[].data_end) and how. This host never names the holder.
Show child attributes
Show child attributes
The MLS listing on the parcel: the latest listing the feed knows, its status, prices and agent. Its owner_test says if it belongs to the parcel's current holder, and is null when no investor holds the parcel. Its list_to_bought_ratio is null here. Null when the parcel carries no listing record, and when the market has no published listing tables (meta.coverage[].listings_data_end is null then). This host does not name the agents.
Show child attributes
Show child attributes
The short-term rental licence facts of the parcel from the city's own roll. The block says if the parcel is licensed and since when. It says if the licence belongs to the current owner and on what basis, and if the use is a business. Served to every key. Present on every parcel inside a loaded city: status NONE when it has no record, status null where coverage.served is false. Null outside every loaded city (meta.coverage[].str.jurisdictions says why), and when the market has no published short-term rental tables (meta.coverage[].str_as_of is null then).
Show child attributes
Show child attributes
Every deal on the parcel: every kind and every year, public-body investors included, because a parcel lookup is not a list. Newest purchase first, undated deals last.
Show child attributes
Show child attributes
Every Investorlift listing of the house, newest first, each with the listing company and what the deeds show occurred. The API does not attach a hidden-address listing without a closing deed to the parcel, so it does not appear. Empty when the house was never listed. Null when the wholesale tables are not published (meta.coverage[].wholesale_as_of is null then). Served to every key.
Show child attributes
Show child attributes
Was this page helpful?