Get parcel by ID
Retrieve a single parcel by its composite ID (county_fips:parcel_id).
Request
- Base URL: https://propraven.com
- URL: https://propraven.com/api/v1/parcels/{id}
- Auth: HTTP bearer
Path parameters
Composite parcel identifier in the format county_fips:parcel_id (e.g., 37:119:12104406).
Response
Parcel found.
PropRaven parcel UUID. Accepted by GET /parcels/{id}.
3-digit within-state county FIPS code (the 5-digit form is state_fips + county_fips).
2-digit state FIPS code.
County-assigned parcel identifier (APN as the county publishes it). The canonical id is state_fips:county_fips:parcel_id.
USPS 2-letter state code of state_fips ("37" → "NC"). Always a string; the 2-digit FIPS is state_fips.
Price of the last sale. From the parcel record; where null, filled from the same county-recorder deed that supplies last_sale_date (last_sale_price_basis: county_recorder_deeds). A nominal consideration (≤ $1,000) is never served as a price. A sentinel price ($0, $1 or $100) is served as null with last_sale_price_raw and last_sale_price_flag: sentinel_value (#557).
Date of the last sale. From the parcel record; where the record's date is null or withheld (e.g. a county collection stamp, site_gate), filled from the latest arm's-length transfer in the county recorder's per-deed rows (last_sale_date_basis: county_recorder_deeds, last_sale_source: "County recorder (deeds)").
County market value: the market (just / full cash / appraised) value on the county assessor's record, or null when the record carries none. Never PropRaven's model output: a stored value that is the same figure as avm_value (and not the county's own assessed value) is withheld here and market_value_basis says so. PropRaven's model is avm_value ("PropRaven estimate").
PropRaven estimate: PropRaven's own automated valuation (a model output — see avm_method, avm_method_family, avm_method_basis). Not the county's value and not a licensed appraisal. Display it as "PropRaven estimate", never as "market value".
Composite deal opportunity score from 0 to 100.
Owner's mailing street line. Read from whichever mailing column family the record fills (owner_address/… or owner_mailing_/…), one family per parcel — the same rule as GET /api/v1/parcels/{id}/owner. People data: requires an account; metered and logged (see owner_mailing_fields).
Owner's mailing city, from the same family as owner_address.
Owner's mailing state, from the same family as owner_address.
Owner's mailing ZIP, from the same family as owner_address.
How the served owner_occupied_flag was derived (one rule with is_absentee, so the row never says both absentee and owner-occupied): recomputed_from_row = from this record's own mailing address versus its situs; input_missing = the record lacks those inputs and owner_occupied_flag is null. Present whenever owner_occupied_flag is served and the derivation ran.
What price_per_sqft divides by building_sqft, read from the row (#557): market_value (county market value), avm_value (PropRaven estimate), total_assessed_value, last_sale_price, unreproduced (no served value reproduces it), or input_missing (no building_sqft; the ratio is withheld).
What market_value is: county_record (the record's market-value column as the county source published it), propraven_estimate (the stored value was PropRaven's own estimate, so market_value is null; the estimate is in avm_value), or unavailable.
Present when market_value was withheld because it was PropRaven's estimate, not the county's value.
Why last_sale_date holds what it does: county_recorder_deeds when filled from the deeds, or the site gate's reason when the record's own date was withheld (e.g. sale_date_modal_collection_stamp).
The record's own last-sale date when the site gate withheld it (evidence, not a sale date).
county_recorder_deeds when last_sale_price was filled from the deeds; nominal_consideration_not_a_price / not_recorded_on_deed when the date was filled but the deed carries no market price.
Present when a last-sale field was filled from deeds: "County recorder (deeds)".
Present when the owner mailing fields were read from the owner_mailing_* column family because the owner_address family is not mail-ready: owner_mailing.
The formula behind price_per_sqft_basis, in words.
The name-pattern entity_type when it was reconciled to owner_entity_type for a government owner (#557).
reconciled_to_owner_entity_type when entity_type was overridden.
The stored land_use_code when the code/description pair was swapped at source and served swapped back.
The stored land_use_desc when it was a code (withheld) or part of a swapped pair.
swapped_at_source: land_use_code and land_use_desc were stored in each other's fields.
code_not_description: the source's description field holds a code (e.g. DC tax class, a second NY property-class code); withheld, kept as land_use_desc_raw.
The stored sale price when it is a sentinel ($0 / $1 / $100) served as null.
government_owner: a government-owned parcel is not a redevelopment candidate.
Example response
{
"county_fips": "119",
"state_fips": "37",
"parcel_id": "12104406",
"address": "123 Main St",
"city": "Raleigh",
"state": "NC",
"zip": "27601",
"latitude": 35.7796,
"longitude": -78.6382,
"last_sale_price": 295000,
"last_sale_date": "2021-06-15",
"market_value": 310000,
"deal_score": 72,
"year_built": 1998,
"owner_name": "SMITH JOHN A",
"zoning": "R-6",
"county_name": "Wake"
}Changes
No recorded changes to this operation across all 1 revision of this API.