---
title: "County-quarter transaction summary or affordability index"
method: GET
path: "/api/v1/deals/market"
tags: ["Deals"]
---

# County-quarter transaction summary or affordability index

`GET /api/v1/deals/market`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/deals/market`
- Auth: HTTP bearer

Default: returns county/quarter transaction summaries. Pass `view=affordability` to retrieve the home-affordability index instead (price-to-income ratios + rating).

## Query parameters

- `view` 'affordability'
- `county_fips` string
- `state_fips` string
- `year` string
- `rating` 'AFFORDABLE' | 'MODERATE' | 'EXPENSIVE' | 'VERY_EXPENSIVE'
- `limit` integer
- `offset` integer

## Response `200`

Market summary or affordability rows returned. Shape varies with the `view` parameter.

- union
  - object
    - `data` MarketSummary[], required
      - `county_fips` string, required
      - `year` integer, nullable, required
      - `quarter` integer, nullable, required
      - `transaction_count` integer, nullable, required
      - `median_price` number, nullable, required
      - `avg_price` number, nullable, required
      - `total_volume` integer, nullable, required
      - `cash_sale_count` integer, nullable, required
      - `cash_sale_pct` number, nullable, required
      - `median_consideration` number, nullable, required
      - `unique_buyers` number, nullable, required
      - `unique_sellers` number, nullable, required
      - `refreshed_at` string, nullable, required
      - `state_fips` string, required
      - `county_name` string, nullable, required
      - `state` string, nullable, required
      - `sale_count` integer
      - `median_sale_price` number, nullable
      - `avg_sale_price` number, nullable
    - `data_provenance` object, required
      - `dataset` string, required
      - `period_upper_bound` string, required
      - `returned_records` number, required
      - `oldest_record_refresh` string, nullable, required
      - `newest_record_refresh` string, nullable, required
      - `records_without_refresh` number, required
      - `source_vintage` string, nullable, required
      - `basis` string, required
    - `total` integer, required
    - `limit` integer, required
    - `offset` integer, required
  - object
    - `data` AffordabilityRow[]
      - `county_fips` string, required
      - `median_household_income` number, nullable, required
      - `median_sale_price` number, nullable, required
      - `price_to_income_ratio` number, nullable, required
      - `affordability_rating` 'AFFORDABLE' | 'MODERATE' | 'EXPENSIVE' | 'VERY_EXPENSIVE' | 'null', nullable, required
      - `year` integer, nullable, required
      - `refreshed_at` string, nullable, required
      - `state_fips` string
      - `county_name` string, nullable
      - `monthly_payment_estimate` number, nullable
      - `pct_income_for_housing` number, nullable
    - `total` integer
    - `limit` integer
    - `offset` integer

## 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.
- `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)
