---
title: "Fetch up to 100 parcels by (state, county, parcel) tuple"
method: POST
path: "/api/v1/parcels/batch"
tags: ["Parcels"]
---

# Fetch up to 100 parcels by (state, county, parcel) tuple

`POST /api/v1/parcels/batch`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/parcels/batch`
- Auth: HTTP bearer

Card-projection rows for up to 100 unique `(state_fips, county_fips, parcel_id)` tuples. `county_fips` is the 3-digit within-state code (a 5-digit value is refused with a 400 naming the fix). Tuples with no match are listed in `missing`.

## Request body

- object
  - `tuples` object[], required
    - `state_fips` string, required
    - `county_fips` string, required
    - `parcel_id` string, required

## Response `200`

Matched rows and the tuples that did not match.

- object
  - `rows` object[], required
    - `id` string, required
    - `county_fips` string, required
    - `state_fips` string, required
    - `parcel_id` string, required
    - `address` string, nullable, required
    - `normalized_address` string, nullable, required
    - `city` string, nullable, required
    - `state` string, nullable, required: USPS 2-letter state code of `state_fips` (e.g. "NC").
    - `zip` string, nullable, required
    - `zip5` string, nullable, required
    - `zip_plus4` string, nullable, required
    - `latitude` number, nullable, required
    - `longitude` number, nullable, required
    - `land_use_code` string, nullable, required
    - `land_use_desc` string, nullable, required
    - `total_assessed_value` number, nullable, required
    - `land_assessed_value` number, nullable, required
    - `improvement_assessed_value` number, nullable, required
    - `last_sale_price` number, nullable, required
    - `last_sale_date` string, nullable, required
    - `market_value` number, nullable, required: 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").
    - `avm_value` number, nullable, required: 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".
    - `avm_confidence` string, nullable, required
    - `avm_method` string, nullable, required
    - `tax_amount` number, nullable, required
    - `tax_year` integer, nullable, required
    - `deal_score` number, nullable, required
    - `price_per_sqft` number, nullable, required
    - `building_sqft` number, nullable, required
    - `year_built` integer, nullable, required
    - `lot_size_acres` number, nullable, required
    - `lot_size_sqft` number, nullable, required
    - `bedrooms` integer, nullable, required
    - `bathrooms` number, nullable, required
    - `stories` number, nullable, required
    - `units` integer, nullable, required
    - `unit_count` integer, nullable, required
    - `construction_type` string, nullable, required
    - `owner_name` string, nullable, required
    - `owner_address` string, nullable, required
    - `owner_city` string, nullable, required
    - `owner_state` string, nullable, required
    - `owner_zip` string, nullable, required
    - `ownership_type` string, nullable, required
    - `owner_entity_type` string, nullable, required
    - `entity_type` string, nullable, required
    - `is_entity_owned` boolean, nullable, required
    - `is_absentee` boolean, nullable, required
    - `is_pe_aggregator` boolean, nullable, required
    - `owner_occupied_flag` boolean, nullable, required
    - `data_quality_score` number, nullable, required
    - `flood_zone` string, nullable, required
    - `is_sfha` boolean, nullable, required
    - `is_opportunity_zone` boolean, nullable, required
    - `is_justice40` boolean, nullable, required
    - `is_flip` boolean, nullable, required
    - `crime_score` number, nullable, required
    - `crime_tier` number, nullable, required
    - `deed_count` integer, nullable, required
    - `permit_count` integer, nullable, required
    - `permit_count_12mo` integer, nullable, required
    - `zoning` string, nullable, required
    - `zoning_code_raw` string, nullable, required
    - `county_name` string, nullable, required
    - `property_type` string, nullable, required
    - `market_value_basis` 'county_record' | 'propraven_estimate' | 'unavailable': 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`.
    - `market_value_note` string: Present when `market_value` was withheld because it was PropRaven's estimate, not the county's value.
    - `value_labels` object: The display label for each value field: `market_value` → "County market value", `avm_value` → "PropRaven estimate".
      - `market_value` 'County market value', required
      - `avm_value` 'PropRaven estimate', required
  - `missing` unknown[], required
    - unknown

## 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).
- `405`: The endpoint exists but does not support this method. `Allow` lists the methods it does.
- `413`: More than 100 unique tuples.
- `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)
