---
title: "Comparable sales for a parcel"
method: GET
path: "/api/v1/parcels/{id}/comps"
tags: ["Parcels"]
---

# Comparable sales for a parcel

`GET /api/v1/parcels/{id}/comps`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/parcels/{id}/comps`
- Auth: HTTP bearer

Precomputed comparable sales near the parcel (`tier` names the comp source).

## Path parameters

- `id` string, required

## Query parameters

- `n` integer
- `radius` number

## Response `200`

Comparable sales.

- object
  - `subject` object, required
    - `canonical_id` string, required
    - `parcel_id` string, required
    - `state_fips` string, required
    - `county_fips` string, required
    - `building_sqft` number, nullable: The subject's building_sqft the size check used (#558).
    - `year_built` integer, nullable
  - `tier` string, required
  - `radius_miles` number, nullable, required
  - `count` integer, required
  - `comps` object[], required
    - `comp_parcel_id` string, nullable, required
    - `comp_apn` string, nullable, required
    - `comp_sale_price` number, nullable, required
    - `comp_sale_date` string, nullable, required
    - `comp_address` string, nullable, required
    - `comp_sqft` number, nullable, required
    - `comp_year_built` integer, nullable, required
    - `comp_beds` number, nullable, required
    - `comp_baths` number, nullable, required
    - `similarity_score` number, nullable, required: 0–100, computed at read time (see similarity_method); null only when no component can be computed.
    - `distance_miles` number, nullable, required
    - `rank` integer, nullable, required
    - `sale_price_reconciled` boolean, nullable, required
    - `similarity_components` object: Each similarity component, 0–1.
      - `size` number, nullable
      - `year_built` number, nullable
      - `distance` number, nullable
    - `size_ratio` number, nullable: comp_sqft / subject building_sqft.
    - `size_within_bound` boolean, nullable: size_ratio within 1/3–3.
    - `comp_address_raw` string: The stored address when upper-casing changed it.
  - `provenance_gate` object, required
    - `applied` boolean, required
    - `rule` string, required
    - `scope` object, required
      - `state_fips` string, required
      - `county_fips` string, required
    - `comps_reconciled` number, required
    - `reason` string, nullable, required
    - `note` string, nullable, required
  - `comp_set_quality` object: #558: `size_mismatch` when more than half of the comps with a size are over 3× larger or smaller than the subject. A label: the comps are still listed.
    - `status` 'ok' | 'size_mismatch' | 'unchecked', required
    - `size_ratio_bound` number, required
    - `subject_building_sqft` number, nullable, required
    - `comps_with_sqft` integer, required
    - `comps_outside_size_bound` integer, required
    - `reason` string, nullable, required
    - `owner_lane` string, required
    - `mode` string, required
  - `similarity_basis` string
  - `similarity_method` string

## Other responses

- `400`: A query or body parameter is invalid. Nothing was read or charged.
- `401`: Missing, malformed or invalid credential.
- `402`: Monthly call cap reached (free tier, or a paid tier with the hard cap enabled).
- `404`: The resource (or the endpoint) does not exist.
- `405`: The endpoint exists but does not support this method. `Allow` lists the methods it does.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error. The body never carries database or driver text.

---

[API](https://skmtc.dev/propraven/apis/propraven-api.md) · [All operations](https://skmtc.dev/propraven/apis/propraven-api/llms.txt) · [OpenAPI document](https://skmtc.dev/propraven/apis/propraven-api/revisions/37f8158c4eda?raw)
