Skip to main content
One row of POST /v1/properties/search. id is the same prop_ id that every other property route takes. So from a row you can open the parcel, its financing, its permits or its history directly.

Which blocks are on a row

address, general, building and lot are always there. Everything else is a dataset you ask for, and a block you did not ask for is null: A null block is never “nothing found”. It means one of two things: you did not ask for the dataset, or this parcel has no row in that sidecar. summary.datasets echoes what the rows carry, so read that first.

The fields a reader misreads

  • Null against 0. open_lien_count: 0 means the slice has a row for the parcel, and that row records zero open liens. A null financing block means the slice has no row for the parcel. last_sale_price is null when the deed carries no price, never 0. Money is whole dollars throughout.
  • cash_sale_proxy is a proxy and says so. It is true when the last sale carries a price and no purchase mortgage is on record with it. That is the best available evidence of a cash sale, not a fact from the deed. The cash-buyer quicklist and the sale.cash_sale filter read it. It is null on every parcel of a market whose delivery records a purchase mortgage on fewer than one priced last sale in five. meta.coverage[].parcel.sale_mortgage_measured is false there, and the quicklist and the filter answer 422 cash_sale_unavailable, not a page of every priced sale.
  • free_and_clear is the same shape: zero open liens at the slice date. That is a statement about the recorder’s file on meta.coverage[].parcel.financing.as_of.
  • owner_occupied and absentee come from the mailing address on the county roll, not from a visit to the house. Both are null where the roll does not say.
  • held_since is the ownership clock. Every “held ten years” rule reads it: the long-hold and tired-landlord quicklists, and the one-year floor of free-and-clear. The two quicklists measure it against the market’s data_end. free-and-clear measures it against the slice date financing_as_of. No rule measures it against today.
  • distance_miles is null unless the search had a point or a property_id.

Dated blocks

valuation and financing are a snapshot valued at meta.coverage[].parcel.financing.as_of, and any response that carries them lists them in meta.dated[]. This stamp exists to prevent one mistake: a comparison of a dated equity figure with a current list price. Dated data explains the rule.

Contact data

This host does not serve owner.names or owner.mailing: the owner block carries no such keys. It serves owner.mailing_state, because a state is not an identity. The out-of-state-owner and in-state-absentee quicklists read it.

One parcel of a search result: the address and assessor blocks always, the other blocks when datasets names them.

id
string
required

Parcel id, the key to every other property route.

Pattern: ^prop_[0-9a-f]{32}$
market
string
required

The market the parcel belongs to.

distance_miles
number | null
required

Miles from the point or the property_id centre. Null without one.

address
object
required

The situs address and location keys of a parcel.

general
object
required

Classification and occupancy flags.

building
object
required

The structure as the assessor records it.

lot
object
required

The lot and its legal description keys.

owner
object | null
required

Null when you did not request the owner dataset.

sale
object | null
required

Null when you did not request the sale dataset.

tax
object | null
required

Null when you did not request the tax dataset.

listing
object | null
required

Null when you did not request the listing dataset, or the parcel carries no MLS record.

valuation
object | null
required

Dated. Null when you did not request it, or the slice carries no AVM for the parcel.

financing
object | null
required

Dated. Null when you did not request it, or the slice carries no row for the parcel.

permits
object | null
required

Null when you did not request it, or the parcel carries no permit.

history
object | null
required

Null when you did not request it, or the parcel is outside the history lake's ZIP set.

quicklists
string[] | null
required

Every quicklist the parcel matches, when you requested the quicklists dataset. Null otherwise.