Skip to main content
One comparable sale around a subject parcel. GET /v1/properties/{property_id}/comps returns comps in data.comps[], most similar first. The godmode_property_comps tool also returns them, and it keeps ten of them in its concise format. A comp is a priced sale inside the radius and the window on a parcel within the subject’s bedroom, size and age tolerances. It comes from one of two sources. DEED is the arm’s-length last purchase the deed registry keeps for every parcel of every market. MLS is a SOLD listing record, in a market with published listing tables. A comp from that source also carries days_on_market and list_price. A parcel keeps one sale, its newest. When the deed and the MLS record the same sale, the MLS record wins if the deed recorded within 45 days of the close. cash_sale_proxy and last_sale_lender come from the parcel layer. A comp carries them where the market has a parcel layer and the parcel’s last sale is this sale. They are null otherwise. They are also null where the market does not measure the proxy, that is where meta.coverage[].parcel.sale_mortgage_measured is false. deal is the nearest investor exit the deal registry records on the parcel within 45 days of the sale. The block carries the exit’s kind, the exiting investor, the gross profit of a paired deal and the hold in days. It is null when the sale was no investor’s exit. similarity is one minus a weighted sum of five gaps, each over its own tolerance. The five gaps and their weights are:
  • the distance over the radius (0.35)
  • the size gap over the size tolerance (0.25)
  • the bedroom gap over its tolerance (0.15)
  • the age gap over its tolerance (0.10)
  • the sale’s age over the window (0.15)
A tolerance the subject cannot apply contributes nothing.

One comparable sale: the parcel, the sale, the source, the parcel-layer facts where served, the investor exit where recorded, and the similarity.

property_id
string
required

Parcel id: prop_ followed by 32 hex characters, for example prop_e93c776c53354a88de4e58448a6bf21b. The prefix is part of the id.

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

The comp's market (the subject's).

address_short
string | null
required

Situs street line as the delivery formats it; null when the delivery does not record it.

city
string | null
required

City, upper case; null when the delivery does not record it.

zip
string | null
required

5-digit ZIP; null when the delivery does not record it.

distance_miles
number
required

Distance from the subject parcel in miles, two decimals.

sold_on
string
required

The sale date: the deed's recording date on a DEED comp, the close date on an MLS comp.

sold_price
integer
required

The sale price, whole dollars. A comp always carries one, because unpriced sales are not comps.

Required range: -9007199254740991 <= x <= 9007199254740991
price_per_sqft
number | null
required

sold_price over the parcel's living area, two decimals. Null when the sqft is unknown.

bedrooms
integer | null
required

Bedrooms; null when the delivery does not record it.

Required range: -9007199254740991 <= x <= 9007199254740991
bathrooms
number | null
required

Bathrooms; null when the delivery does not record it.

sqft
integer | null
required

The living area in square feet; null when the delivery does not record it.

Required range: -9007199254740991 <= x <= 9007199254740991
year_built
integer | null
required

Year built; null when the delivery does not record it.

Required range: -9007199254740991 <= x <= 9007199254740991
source
enum<string>
required

DEED: the parcel's arm's-length last purchase from the deed registry. MLS: a SOLD listing record. A parcel keeps its newest sale. An MLS record wins over a deed recorded within 45 days of it.

Available options:
DEED,
MLS
days_on_market
integer | null
required

Days on market of the MLS record. Null on a DEED comp.

Required range: -9007199254740991 <= x <= 9007199254740991
list_price
integer | null
required

The last list price of the MLS record. Null on a DEED comp, or when the feed carries none.

Required range: -9007199254740991 <= x <= 9007199254740991
cash_sale_proxy
boolean | null
required

True when the sale carried a price and no purchase mortgage is on record for it. The API reads it from the parcel layer where the market has one and the layer's last sale is this one (45 days). Null where the layer is absent, the sale is not the layer's last sale, or the market does not measure the proxy. That last case is meta.coverage[].parcel.sale_mortgage_measured false.

last_sale_lender
string | null
required

The lender of the purchase mortgage recorded on the sale, read the same way. Null where none is on record, or the layer is absent.

deal
object | null
required

The investor exit this sale was, or null when the deal registry records no exit on the parcel within 45 days of the sale date.

similarity
number
required

How close the comp is to the subject, 0 to 1, three decimals: one minus a weighted sum of five ratios. The first three: the distance over the radius (0.35), the size gap over the size tolerance (0.25), the bedroom gap over its tolerance (0.15). The last two: the age gap over its tolerance (0.10), and the sale's age over the window (0.15). A tolerance the subject cannot apply contributes nothing. The API orders the comps by it.

Required range: 0 <= x <= 1