{
"property_id": "<string>",
"market": "<string>",
"address_short": "<string>",
"city": "<string>",
"zip": "<string>",
"distance_miles": 123,
"sold_on": "<string>",
"sold_price": 0,
"price_per_sqft": 123,
"bedrooms": 0,
"bathrooms": 123,
"sqft": 0,
"year_built": 0,
"days_on_market": 0,
"list_price": 0,
"cash_sale_proxy": true,
"last_sale_lender": "<string>",
"deal": {
"id": "<string>",
"investor_id": "<string>",
"gross_profit": 0,
"hold_days": 0
},
"similarity": 0.5
}The Comp object
One comparable sale: the parcel, the sale and its source, the parcel-layer facts where served, the investor exit where recorded, and the similarity.
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)
One comparable sale: the parcel, the sale, the source, the parcel-layer facts where served, the investor exit where recorded, and the similarity.
Parcel id: prop_ followed by 32 hex characters, for example prop_e93c776c53354a88de4e58448a6bf21b. The prefix is part of the id.
^prop_[0-9a-f]{32}$The comp's market (the subject's).
Situs street line as the delivery formats it; null when the delivery does not record it.
City, upper case; null when the delivery does not record it.
5-digit ZIP; null when the delivery does not record it.
Distance from the subject parcel in miles, two decimals.
The sale date: the deed's recording date on a DEED comp, the close date on an MLS comp.
The sale price, whole dollars. A comp always carries one, because unpriced sales are not comps.
-9007199254740991 <= x <= 9007199254740991sold_price over the parcel's living area, two decimals. Null when the sqft is unknown.
Bedrooms; null when the delivery does not record it.
-9007199254740991 <= x <= 9007199254740991Bathrooms; null when the delivery does not record it.
The living area in square feet; null when the delivery does not record it.
-9007199254740991 <= x <= 9007199254740991Year built; null when the delivery does not record it.
-9007199254740991 <= x <= 9007199254740991DEED: 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.
DEED, MLS Days on market of the MLS record. Null on a DEED comp.
-9007199254740991 <= x <= 9007199254740991The last list price of the MLS record. Null on a DEED comp, or when the feed carries none.
-9007199254740991 <= x <= 9007199254740991True 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.
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.
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.
Show child attributes
Show child attributes
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.
0 <= x <= 1Was this page helpful?